Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hi,
gezwungenermaßen muss ich eine GUI mit Netbeans 4.1 entwickeln. Nun habe ich auf einem JFrame ein JPanel mit JLabels und JTextFields (insg. ca. 130) und ein JPanel mit mehreren JButtons angelegt. Leider ist mir jetzt erst aufgefallen, dass diese beiden JPanel eigentlich in eine JTabbedPane gehören (auf dem anderen Tab soll dann eine JTextArea).
Meine große Preisfrage lautet nun:
Wie kann ich jetzt, nachträglich, die JTabbedPane einfügen und die vorhandenen beiden JPanel darauf platzieren? Möglichst einfach, und ohne alle Elemente eneut anlegen zu müssen.
Ich hoffe ich verstehe dich richtig...
(Nicht wirklich elegant der code
Code:
JTabbedPane tb = new JTabbedPane();
JPanel pane = new JPanel();//<<- neues Panel dem du die beiden unteren addest
JPanel pLabelsFields = new JPanel(); //<-dein Panel mit Labels und TextFields
JPanel pButtons = new JPanel(); //<- dein Panel mit Buttons
pane.add(pLabelsFields);
pane.add(pButtons);
JPanel txtPane = new JPanel();
JTextArea txtArea = new JTextArea();
txtPane.add(txtArea);
tb.add("Panel A", pane);
tb.add("text area", txtPane);
Einfach ein JTabbedPane erstellen und die Elemente vom JPanel im Inspector per drag and drop ins JTabbedPane ziehen. Und dann den Panel löschen.
Eine andere Lösung wäre natürlich einfach das JPanel ins JTabbePane zu ziehen :-D
wenn du den Inspector öffnest, bekommst du eine baumartige Ansicht aller verwendeten GUI-Komponenten.
Du kannst die Komponenten per Drag'nDrop verschieben und somit die Reihenfolge und die Inhalte der Container nachträglich beeinflussen.
Eine andere Variante ist der Rechtsklick auf eine Komponente und im sich öffnenden Kontextmenü sollten dann die Einträge move up und move down zu sehen sein, die am Ende den gleichen Effekt bringen, wie die Drag'nDrop-Methode.
Im Prinzip ist es egal, an welche Stelle (im Baum/GUI) du die JTabbedPane einfügst, du kannst sie jederzeit innerhalb deiner GUI bzw. deines Baums verschieben.
Thx Euch allen, hat mir weitergeholfen.
Habs jetzt mit viel Frickelei hinbekommen. Erst die TabbedPane eingefügt an einer freien Stelle des GBL, dann die Größe verändert und danach die Panel auf das Tab gezogen. Allerdings darf man dabei nicht vergessen, auf dem Tab erst ein neues, leeres Panel anzulegen, weil sonst das erste Panel, welches herübergezogen wird, als komplettes Tab-Panel genommen wird. Das erschwert es, weitere Panel einzufügen.
BTW: Netbeans ist ein Resourcendieb wie sonstwas. Auf einem Celeron 2GHz mt 256MB RAM ist das Teil dermaßen lahm, da könnte ich <self-censored> - Eclipse ist da viel schneller. Bedauerlicherweise hat man sich hier wegen des GUI-Builders auf Netbeans festgelegt.
Auch wenn einige das Gegenteil sagen oder ihre GUIs mit Hand erstellen: Ich finde der NetBeans GUI-Editor ist ziemlich produktiv. Ich habe einen AMD Athlon 1600 XP mit 512 MB RAM, da läufts eigentlich schon ganz brauchbar.
Was mir an dem Editor nicht gefällt:
Der generierte Code ist unantastbar/read-only und das Verschieben der Komponenten mit der Maus an eine andere Stelle (z.B. innerhalb eines GBL-Rasters) ist nicht möglich.
Der generierte Code ist antastbar, sogar modifizierbar, ganz nach dem Belieben des Programmierers!
Zu jeder einzelnen GUI-Komponente gibts einen Code-Bereich, der wenn man sich damit erstmal vertraut gemacht hat, ziemlich gut zu bedienen ist.
Klicke mal eine Komponente an, und schau mal in den Properties-Bereich. Dort findest du einen Button "Code" -> klicke da mal drauf. Dort findest du dann Einträge wie "Pre init", "Post init", "Pre Creation", "Post Creation" etc.
Dass sind die Codebereiche des Codeeditors. Z.B. Vor der Initialisierung, nach der Initialisierung etc.
In diesen Bereich kannst du beliebige Code oder auch ganze Komponenten oder Schleifen einfügen.
Was nicht möglich ist: den Code der von Netbeans generiert wurde direkt zu editieren.
Dabei gleich ne Frage: Wenn ich einen Dialog erstelle würde ich gern für diesen pack() aufgerufen haben, wenn alle Komponenten hinzugefügt wurden, wie geht das?
Klar, ich könnte es ins Post init der letzten Komponente hineingeben, aber was, wenn ich noch eine hinzufüge nachträglich?
Eine weitere Möglichkeit wäre es das im Konstruktor nach initComponents zu machen, aber das gefällt mir stilistisch nicht, denn dafür ist ja initComponents da, dass man das darin erledigt, oder?
Der Aufruf der pack()-Methode wäre meiner Meinung nach direkt nach der initComponents()-Methode an richtiger Stelle. Es ist sicher auch stilistisch kein Fehler, da du ja auch in jeder Methode zu anderen Methoden verzweigen kannst.
Sicher gibts einen Weg.
Klicke mal in deinem Inspector auf deinen JFrame und wechsle dann zu den Properties. Klicke hier in den "Code"-Bereich und dort auf die JCombobox der "Form Size Policy". Dort wählst du "Generate pack()".