Guten Morgen allerseits
Ich habe mich in den letzten paar Stunden (des gestrigen Tages) intensiv mit der Struktur meines Programmes beschäftigt. Dabei ist folgendes raus gekommen:
- Die Klasse Main ruft zwei andere Klassen auf, welche je ein JPanel mit Navigation und Content zurück geben.
- Wenn ein entsprechendes Flag gesetzt wurde, so geht ein neues Fenster auf. Ansonsten passiert: getContentPane().repaint();
- Beim erstmaligen Aufruf der Klasse wird nun also die Startseite (mit der Id 1) geladen und ein neues Fenster geöffnet.
- In der Klasse SetNav() werden nun drei Buttons kreiert und auf jeden dieser Buttons ein ActionListener registriert.
- Bei Klick auf Button 2 rufe ich die Klasse Main wieder auf und zwar so: new Main(false, 2);
In meinem Verständnis wird bei Klick auf Button 2 Main wieder aufgerufen und darin von der Klasse SetContent ein neues JPanel angefordert. Zurückgegeben wird ein pMid, dass das neue JLabel beinhaltet. Da openWindow auf false ist, soll mir kein neues Fenster geöffnet werden, sondern nur die contentPane neu gemalt werden. In einem Test - Script funktioniert dieser Ansatz. Da ist allerdings alles in der gleichen Klasse.
Weiss einer was schief läuft? Ich schaffe es nicht, dass "Ich bin das Label 2" erscheint. Obwohl im Switch case 2 aufgerufen wird bleibt "Ich bin das Label 1" bestehen. Bin grad etwas ratlos.
Danke für die Hilfe.
Gruss Igäl
Ich habe mich in den letzten paar Stunden (des gestrigen Tages) intensiv mit der Struktur meines Programmes beschäftigt. Dabei ist folgendes raus gekommen:
- Die Klasse Main ruft zwei andere Klassen auf, welche je ein JPanel mit Navigation und Content zurück geben.
- Wenn ein entsprechendes Flag gesetzt wurde, so geht ein neues Fenster auf. Ansonsten passiert: getContentPane().repaint();
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Main extends JFrame {
private JPanel pMain = new JPanel();
private SetNav pNav = new SetNav();
private SetContent pCont = new SetContent();
public Main(boolean openWindow, int loadId) {
pMain.setLayout(new BoxLayout(pMain, BoxLayout.Y_AXIS));
pMain.add(pNav.getNav()); //Navigation hinzufügen
pMain.add(pCont.getCont(loadId)); //Content hinzufügen
add(pMain, BorderLayout.PAGE_START);
if(openWindow == true) {
addWindowListener(new CloseWindow(true));
setSize(800, 600);
setResizable(false);
setVisible(true);
}else{
getContentPane().repaint();
}
}
public static void main(String[] args) {
Main main = new Main(true, 1);
}
}
- Beim erstmaligen Aufruf der Klasse wird nun also die Startseite (mit der Id 1) geladen und ein neues Fenster geöffnet.
- In der Klasse SetNav() werden nun drei Buttons kreiert und auf jeden dieser Buttons ein ActionListener registriert.
- Bei Klick auf Button 2 rufe ich die Klasse Main wieder auf und zwar so: new Main(false, 2);
Code:
import javax.swing.*;
public class SetContent extends JFrame {
private JPanel pMid = new JPanel();
private ContentObjects cobj = new ContentObjects();
public JPanel getCont(int pageId) {
pMid.removeAll();
switch(pageId) {
case 1: pMid.add(cobj.createLabel("Ich bin das Label 1"));
break;
case 2: pMid.add(cobj.createLabel("Ich bin das Label 2"));
break;
default: pMid.add(cobj.createLabel("Default Label"));
}
pMid.validate();
return pMid;
}
}
In meinem Verständnis wird bei Klick auf Button 2 Main wieder aufgerufen und darin von der Klasse SetContent ein neues JPanel angefordert. Zurückgegeben wird ein pMid, dass das neue JLabel beinhaltet. Da openWindow auf false ist, soll mir kein neues Fenster geöffnet werden, sondern nur die contentPane neu gemalt werden. In einem Test - Script funktioniert dieser Ansatz. Da ist allerdings alles in der gleichen Klasse.
Weiss einer was schief läuft? Ich schaffe es nicht, dass "Ich bin das Label 2" erscheint. Obwohl im Switch case 2 aufgerufen wird bleibt "Ich bin das Label 1" bestehen. Bin grad etwas ratlos.
Danke für die Hilfe.
Gruss Igäl