Hallo,
Gibt es eine Möglichkeit das man eine andere Klasse samt GUI in eine andere einbinden kann.
Es soll nach Möglichkeit in einem Border Layout im Center ja nach Programphase Klassen mit verschiedene GUI dargestellt werden.
Ich habe in der (ich nenne sie mal) Main Klasse ein Border Layout in dem ich in den 4 Himmelsrichtungen noch Panels mit GUI habe (z.B. JMenue im Norden).
In anderen Klassen habe ich ebenfalls GUIs die ich z.B. je nach dem was im JMenue passiert gerne ins Center des Main Panels einbinden möchte.
So in etwa hatte ich mir das auch schon gedacht aber es hat nicht geklappt. Muss ich die Klassen die ich einbinden möchte speziell konfigurieren ?
Das "samt GUI" kommt mir komisch vor. Natürlich kannst du Klassen in Klassen (anonym, inner) legen. Auch kannst du Klassen in anderen Klassen verwenden, sonst würde das ganze SDK zusammenbrechen. Wenn du eine grafische Komponente willst, die du mittels eines Layouts einbinden kannst, dann erbst du einfach nur von JComponent (sofern du Swing verwendest, was anzuraten ist) oder einer passenden Kindklasse (z.B. JPanel). Dann änderst du eben genau das, was du möchtest und fertig ist deine Komponente.
Wie meinst du das ? Alles in der anderen Klasse auf JPanel, JButton, JLabel,…. Und dergleichen beschränken ?
Posten könnte ich aber das sind ja 8 Klassen mit je etwa 200 Codezeilen.
Welche Teile wären denn wichtig ?
In der einen Klasse habe ich die Steuerung für das Programm. In den anderen Klassen habe ich verschiedene Elemente wie ein Kalender oder ein Datenbanken Programm. Einige der Klassen sind noch von früher da und ich würde sie gerne „recyceln“.
Die Klassen sind alle unterschiedlich, den Relevanten Teil poste ich gerne. Nur der ganze Ballast wie z.B. Feiertagsberechnung für den Kalender spammt zum einen nur alles zu und zum anderen liest so viel Code ja keiner.
Ok, THX ! ! !
Ich denke jetzt habe ich es. Die einzubindende GUI Klasse erbt JPanel.
Und das Panel auf das ich in der GUI Klasse alles setzte wird this gesetzt.
Ich verstehe nicht ganz, was du sagst, aber es ist so:
Die einzubindende Klasse muss JPanel(oder JComponent oder so) erben und anstatt in der einzubindenden Klasse eine neue Instanz von JPanel zu machen, ersetzt du das durch
Code:
this
.
Wenn ich's richtig verstehe, dann machst du genau das Gegenteil, oder?
So muss es sein:
Java:
packageTestPanel;importjavax.swing.*;publicclassPanelTestextendsJPanel{JButton btn_Button =newJButton("Test");publicPanelTest(){this.add (btn_Button);}// Constructor}// Class
und
Java:
packageTestPanel;importjava.awt.*;importjavax.swing.*;publicclassStartTest{JFrame f_Frame =newJFrame();publicstaticvoid main (String[] args){newStartTest();}// MainpublicStartTest(){
f_Frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
f_Frame.setLayout (newBorderLayout());
f_Frame.add(newPanelTest(),BorderLayout.CENTER);
f_Frame.setVisible (true);}// Constructor}// Class
Jetzt bin ich doch wieder verwirrt. Warum hast du das Panel rausgenommen ? Ich dachte ich muss alles auf ein Panel adden und adde das dann in der GUI der anderen Klasse.
Wenn du das machst : JPanel panel=new JPanel(); wird ein neues JPanel erzeugt. Das ist klar.
Wenn du nun das machst: MeinPanel panel=new MeinPanel() und in MeinPanel extends JPanel steht, dann hat MeinPanel alles das, was JPanel auch hat. Und noch mehr, wenn du eine neue Methode in MeinPanel erstellst. Somit machst du ein JPanel, das jedoch an deine Anforderungen angepasst ist.
Wenn du ein MeinPanel ein neues JPanel deklarierst, dann hast du schon zwei. Naemlich MeinPanel(ein JPanel, das du aber veraendern kannst) und das in MeinPanel deklarierte, total normale JPanel. Aber du willst ja nicht 2 JPanel (ein besonderes und ein normales) sondern nur 1 besonderes. Und damit MainPanel besonders ist, muss man MAINPANEL etwas hinzufuegen und nicht einer neuen Instanz von JPanel.
Das war jetzt der Kernpunkt von OOP in 5 Saetzen. Ich hoffe du verstehst es, ansonsten musst du dir mal was in der Java-Insel durchlesen(bei google 'java ist auch eine insel' eingeben. Dort findest du das online buch)
Das neue Super Panel ist eine Sache. Das verstehe ich soweit auch. Aber was mache ich wenn ich auf das Super Panel mehrere Panels adden möchte. Ich habe z.B. Bei dem Kalender ein Panel für Vormittags und Nachmittags. Beide jeweils mit Uhrzeit und Terminen. Beide habe ich getrennt damit ich sie beide je nach belieben verändern kann. Wie z.B. längere Mittagspause.
Allerdings schiebt er mir das ganze zusammen. Ich habe so nur einen kleinen Streifen von etwa 20% der Fensterbreite wo das Panel angezeigt wird. Desweiteren lässt er mir auch unten einiges an Platz.