Code Blöcke

  • Themenstarter Themenstarter Gelöschtes Mitglied 5909
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Gelöschtes Mitglied 5909

Gast
Eine Frage: Warum bekomme ich bei folgendem einen Fehler:

Code:
    private Component createBottomPanel() {
        return new JPanel() {
            {
                setLayout(new FlowLayout());
                add(new JButton("Ok"), FlowLayout.TRAILING);
                add(new JButton("Cancel"), FlowLayout.TRAILING);
            }
        };
    }

das ganze ist in einem JFrame mit einem anderen Layout, vermutlich will er add beim JFrame aufrufen, was aber eigentlich durch die Codeblöcke gewährleistet sein sollte. Ich persöhnlich fände den Stil eigentlich ganz nett, einziger nachteil sind viele Klassen wenn man das mit allem so macht. Spart aber schreibarbeit und ist wie ich finde sogar besser lesbar.

Die Exception

Exception in thread "main" java.lang.IllegalArgumentException: illegal component position
at java.awt.Container.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
at de.test.EclipseDialog$1.<init>(EclipseDialog.java:37)
at de.test.EclipseDialog.createBottomPanel(EclipseDialog.java:34)
at de.test.EclipseDialog.createLayout(EclipseDialog.java:30)
at de.test.EclipseDialog.<init>(EclipseDialog.java:21)
at de.test.EclipseDialog.main(EclipseDialog.java:77)

bei der Zeile mit add() vom ok button
 
ach dich depp

Code:
    private Component createBottomPanel() {
        return new JPanel() {
            {
                setLayout(new FlowLayout(FlowLayout.TRAILING)));
                add(new JButton("Ok") ;
                add(new JButton("Cancel"));
            }
        };
    }

so gehts natürlich.

was haltet ihr von dem "Stil" ?
 
Nicht viel.
Ich weiß auch nicht, ob ich zu unkreativ (oder unwissend) bin, aber ich hätte dem Stück nicht angesehen, dass es durch den Compiler kommt.
 
was haltet ihr von dem "Stil"?

Nicht hübsch, aber praktisch. Genau dafür sind diese Init-Blöcke ja da. Mache ich z.B. regelmäßig bei Actions so.

Wäre schön, wenn Sun doch noch zur Vernunft käme und einen - irgendeinen - der drei Closure-Vorschläge umsetzen würde. Dann bräuchte man sowas nicht mehr...
 
hier wird doch ganz unnötig eine Subklasse erzeugt, das ist doch schrecklich,
sowas will man mit Closures bestimmt auch nicht haben,

die drei Befehle könnten genausogut an einem normalen JPanel-Objekt aufrufen werden
 
Das seh ich genau so. Es ist schwieriger zu verstehen und behindert beim Debugging. Außerdem spart man mit dem Unsinn höchstens eine Zeile.
 
Nun wenn die Closures wie bei Groovy umgesetzt werden, dann wirds auch jede Menge class files hageln.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben