ich bin auf ein ganz seltsames verhalten gestoßen,
ich möchte auf der Linken Seite des fensters ein JPanel ein und ausblenden können.
das wichtigste aus der Klasse UserInterface sieht folgendermaßen aus...
das seltsame dabei ist, sobald ich im Konstrukutor der Klasse test die Funtkion userInterface.setShowNetwork(true) nicht aufrufe, wird zwar das westPanel nach drücken des Buttons "Netze" gezeichnet, aber leer. Auch wenn ich nach der genannten Funktion den Aufruf userInterface.setShowNetwork(false) aufrufen würde, würde das Panel westPanel immer leer gezeichnet werden.
Wenn ich jedoch userInterface.setShowNetwork(false) außerhalb des Konstruktors von test aufrufe, in meinem Code also in der Funtkion test.setNetwork(), dann wird das westPanel samt innhalt gezeichnet (wenn ich auf den Button Netze klicke), aber nur wenn im Konstruktor von Test eben der befehl userInterface.setShowNetwork(true) aufgerufen wurde.
Aber westPanel ist doch eine Klassenvariable. Warum werden die Elemente die ich diesem Panel hinzugefügt habe nur in manchen Fällen übernommen?
ich möchte auf der Linken Seite des fensters ein JPanel ein und ausblenden können.
Code:
public class Test {
UserInterface userInterface;
public Test() {
userInterface = new UserInterface();
userInterface.addWindowListener(new WindowClosingAdapter(userInterface));
userInterface.setShowNetwork(true);
//userInterface.setShowNetwork(showNetwork);
userInterface.setSize(100,100);
userInterface.setLocation(100,100
userInterface.setVisible(true);
}
public void setNetwork() {
userInterface.setShowNetwork(false);
}
public static void main(String args[]) {
Test test = new Test();
test.setNetwork();
}
}
das wichtigste aus der Klasse UserInterface sieht folgendermaßen aus...
Code:
public class UserInterface
extends JFrame
implements ActionListener{
boolean showNetwork;
JPanel westPanel;
JTabbedPane westTP;
GmlPanel gmlPanel;
JTextField searchTextField;
public UserInterface() {
super("Visualisierung von GML");
getContentPane().setLayout(new BorderLayout(5, 5));
JPanel toolbarPanel = new JPanel();
toolbarPanel.setLayout(new BorderLayout(5, 5));
//Toolbar
JToolBar toolbar = new JToolBar();
JIconButton iconButton;
//Der Netze Button öffnet oder schließt links ein Panel, auf dem die Netze ausgewählt werden können
iconButton = new JIconButton("Netze", "network.gif");
iconButton.addActionListener(this);
toolbar.add(iconButton);
toolbarPanel.add( toolbar, BorderLayout.NORTH );
//.. hier habe ich jetzt jede Menge weggelassen was für das Problem nicht relevant ist
getContentPane().add( toolbarPanel, BorderLayout.NORTH);
westPanel = new JPanel();
westPanel.setBorder(new BevelBorder(BevelBorder.RAISED));
westTP = new JTabbedPane();
panel = new JPanel();
panel.setLayout(new GridLayout(3,2));
JCheckBox cb1 = new JCheckBox( "PKW", true );
panel.add(cb1);
cb1 = new JCheckBox( "Bus", true );
panel.add(cb1);
cb1 = new JCheckBox( "Eisenbahn", true );
panel.add(cb1);
cb1 = new JCheckBox( "U-Bahn", true );
panel.add(cb1);
cb1 = new JCheckBox( "Flugzeug", true );
panel.add(cb1);
westTP.addTab("Verkehrsmittel", panel);
panel = new JPanel();
westTP.addTab("Bezirke", panel);
panel = new JPanel();
panel.setLayout(new GridLayout(3,2));
westTP.addTab("Rasterbilder", panel);
cb1 = new JCheckBox( "Niederschläge", true );
panel.add(cb1);
cb1 = new JCheckBox( "Satelitenbild", true );
panel.add(cb1);
westPanel.add(westTP);
gmlPanel = new GmlPanel();
getContentPane().add( gmlPanel, BorderLayout.CENTER);
}
public void setShowNetwork(boolean showNetwork){
this.showNetwork = showNetwork;
if(showNetwork == true) {
getContentPane().add( westPanel, BorderLayout.WEST);
getContentPane().doLayout();
}
else {
getContentPane().remove(westPanel);
getContentPane().doLayout();
}
}
public void actionPerformed(ActionEvent event) {
if(event.getActionCommand()=="Netze") {
setShowNetwork(!showNetwork);
}
}
das seltsame dabei ist, sobald ich im Konstrukutor der Klasse test die Funtkion userInterface.setShowNetwork(true) nicht aufrufe, wird zwar das westPanel nach drücken des Buttons "Netze" gezeichnet, aber leer. Auch wenn ich nach der genannten Funktion den Aufruf userInterface.setShowNetwork(false) aufrufen würde, würde das Panel westPanel immer leer gezeichnet werden.
Wenn ich jedoch userInterface.setShowNetwork(false) außerhalb des Konstruktors von test aufrufe, in meinem Code also in der Funtkion test.setNetwork(), dann wird das westPanel samt innhalt gezeichnet (wenn ich auf den Button Netze klicke), aber nur wenn im Konstruktor von Test eben der befehl userInterface.setShowNetwork(true) aufgerufen wurde.
Aber westPanel ist doch eine Klassenvariable. Warum werden die Elemente die ich diesem Panel hinzugefügt habe nur in manchen Fällen übernommen?