# Netbeans: Wie nachträglich JTabbedPane einfügen?



## Snape (26. Jul 2005)

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.


----------



## lin (27. Jul 2005)

Ich hoffe ich verstehe dich richtig...
(Nicht wirklich elegant der 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);
```


----------



## stev.glasow (27. Jul 2005)

Er meinte mit dem GUI Designer.


----------



## neXyon (27. Jul 2005)

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

Mfg


----------



## L-ectron-X (28. Jul 2005)

Ey Busenkumpel, :wink: 

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.


----------



## Snape (28. Jul 2005)

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.


----------



## L-ectron-X (28. Jul 2005)

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.


----------



## Snape (29. Jul 2005)

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.


----------



## L-ectron-X (29. Jul 2005)

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.


----------



## neXyon (29. Jul 2005)

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?

Mfg


----------



## L-ectron-X (29. Jul 2005)

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.


----------



## neXyon (30. Jul 2005)

Trotzdem hätt ichs wenn schon in der initComponents, aber wenns keinen weg gibt: egal.


----------



## L-ectron-X (30. Jul 2005)

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()".


----------

