Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Java und Swing-Problem
#21
Note to self and everybody else: Vergesst die LayoutManager. Macht's gleich selber. Zwei Offsets, eine Schleife und schon sieht das richtig gut aus! Ist an der Stelle auch Unsinn, sich mit dem Quatsch rumzuärgern, da das Menü nicht vergrößert oder verkleinert werden kann.

(Ich glaub, bisher hab ich noch immer, wenn ich vor diesem LayoutManager-Problem stand, irgendwann einfach ohne weitergemacht. :lol:)

Edit: Vorher hab ich noch etwas rumprobiert, GridBagLayout klappte auch ganz gut. Nur war das Problem jetzt, dass das Fenster immer noch zu klein war, da die Ränder, die durch die Rahmentexturen entstehen, nicht berücksichtigt wurden. An der Stelle wurde es mir dann zu kompliziert.

Edit2: Vor allem braucht man ohne LayoutManager viel weniger Code, der zudem eleganter aussieht. ;)
Great people care.
Zitieren
#22
... :rolleyes:

Totally Gridbag!


Edit: Um dem Post noch etwas Sinnvolles hinzuzufügen: Nachdem ich mich gerade mal wieder ein paar Stunden mit diesem Müll rumgeschlagen hab (dieses Mal geht's leider nicht ohne LayoutManager) hab ich im Internet das TableLayout entdeckt. Das erscheint mir bisher auch sehr brauchbar und vor allem sehr unkompliziert - im Vergleich zum Rest jedenfalls. Auf der verlinkten Seite gibt's ne Einführung und Tutorials.
Great people care.
Zitieren
#23
Da fällt mir ein, ich habe vor Jahren mal ein kleines Werkzeug geschrieben, das einem die Verwendung des GridBag-Layouts erleichtern sollte. Man kann beliebig Elemente hinzufügen und deren Eigenschaften anpassen, so lange, bis es passt. Dann klickt man auf "Generate Code" und kriegt das Layout zusammengebastelt.
Wenn Interesse daran besteht, kann ich dieses Programm ja mal hier hochstellen.
Hallo, ich bin's - der Bart von Fidel Castro. Und mir ist total langweilich nie geschnitten wurde.
I'm a roleplayer. My dice are like my relationships: platonic and unlucky.
Zitieren
#24
Hat hier mal jemand mit dem Eclipse Abstract Syntax Tree gearbeitet?
Great people care.
Zitieren
#25
Pfft. Ich hab' mir mal ein Tutorial angesehen. :D
Zitieren
#26
Gut, dann kennst du ihn ja in- und auswändig und kannst mir sicher sagen, wie ich einen Knoten da einfügen kann (direktes Verfahren, kein ASTRewrite)? :D
Great people care.
Zitieren
#27
Meinst Du das hier?

Zitat:Let us have a look at the second way to change an AST. Instead of tracking the modifications in separate protocols, we directly modify the AST. The only thing that has to done before modifying the first node is to turn on the change recording by calling recordModifications() on the root of the AST, the CompilationUnit. Internally changes are logged to an ASTRewrite as well, but this happens hidden to you.

Example 2. Modifying an AST directly.

unit.recordModifications();
// ...
VariableDeclarationStatement statement = createNewVariableDeclarationStatement(manager, ast);
block.statements().add(firstReferenceIndex, statement);
Zitieren
#28
Prinzipiell ja. Das hilft mir nur überhaupt nicht. So weit bin ich schon, dass ich nen neuen Block erstellt und das alte Statement eingefügt habe. Aber wie krieg ich den Block (an der richtigen Stelle) in den Baum? Wie mach ich aus "IfStatement -> Irgendwas" ein "IfStatement -> Block -> Irgendwas"? :confused:
Great people care.
Zitieren
#29
Ich würde nach Überfliegen der Doku sagen, dass man man das anvisierte Elternelement vom Typ Block raussucht, in die von statements() gelieferte Liste an der richtigen Stelle das entsprechende Statement (z.B. das ifStatement selbst oder einen Block) einfügt, und dann den modifizierten AST abspeichert.
Zitieren
#30
Was aber, wenn der übergeordnete Knoten kein Block ist, sondern ein if-Statement oder ähnliches? Dort gibt es keine statements(), children() oder sonstwie geartete Methode, die es erlauben würde die Kinder zu verändern. :sad2:

Meine Aufgabe ist es gerade, aus so etwas:
Code:
if (expr)
  stmt;
so etwas zu machen:
Code:
if (expr) {
  stmt;
}
Great people care.
Zitieren
#31
Ah, ich würde Folgendes probieren: Das IfStatement ifstmnt raussuchen, den Block block zu erzeugen, und dann ifstmnt.setThenStatement(block); ausführen. Klappt das vielleicht?
Zitieren
#32
Oh Mann! Die Methode gibt's ja wirklich! Und wonach haben wir dann eine Woche lang gesucht? :wall:

Danke, Rabe, vielen herzlichen Dank! :jippie: :respect:
Great people care.
Zitieren




Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste