Folgendes Problem:
Ich habe einen Frame mit BorderLayout. Im Norden ist eine Toolbar verankert. Diese ist mit diversen Buttons besetzt.
Auf Aktion eines Buttons, soll dann im Center jeweils das gültige Panel (Eingabe, Ausgabe, Optionen etc...) geschaltet werden. In der Testphase existieren nur Ein- und Ausgabe.
Hieraus ergibt sich:
- über println ist nachzuvollziehen, dass die Buttons funktionieren und auch dass in die jeweiligen add und rem-Methoden verzweigt wird.
- Jeder Button macht exakt 1x das was er soll, danach findet keine Änderung der Panels mehr statt.
was ich ausprobiert habe:
- Versuch beide Panels gleichzeitig im Center zu haben und eins auf Visible(true) das andere auf false zu setzen, bringt keinen Erfolg
- validate() und repaint() austauschen, keine Änderung
- wennn ich das EingabePanel im Westen und das AusgabePanel im Center habe, funktioniert das Programm. ist optisch aber nicht das was ich mir vorstelle
- removeall() und jedesmal dann die Toolbar wieder einfügen, führt dazu, dass die Toolbar jedesmal neu eingesetzt wird, ansonsten das alte Problem, jeder Button nur 1x
Verständnisfragen:
- ist es überhaupt möglich auf diese Art und Weise JPanels (mit ihrem Inhalt) auszutauschen?
- ich hatte an anderer Stelle gelesen, dass Threadsicherheit evtl. ein Problem sein kann
Ich möchte nicht mit JTabs oder Childframes arbeiten. Momentan steckt mehr der Anreiz darin, das Problem zu lösen und nicht zu umgehen (ist eine Freizeitarbeit und dient für mich nur zum Erlernen von Swing)
Vielen Dank für Eure Hilfe
Ich habe einen Frame mit BorderLayout. Im Norden ist eine Toolbar verankert. Diese ist mit diversen Buttons besetzt.
Auf Aktion eines Buttons, soll dann im Center jeweils das gültige Panel (Eingabe, Ausgabe, Optionen etc...) geschaltet werden. In der Testphase existieren nur Ein- und Ausgabe.
Hieraus ergibt sich:
- über println ist nachzuvollziehen, dass die Buttons funktionieren und auch dass in die jeweiligen add und rem-Methoden verzweigt wird.
- Jeder Button macht exakt 1x das was er soll, danach findet keine Änderung der Panels mehr statt.
was ich ausprobiert habe:
- Versuch beide Panels gleichzeitig im Center zu haben und eins auf Visible(true) das andere auf false zu setzen, bringt keinen Erfolg
- validate() und repaint() austauschen, keine Änderung
- wennn ich das EingabePanel im Westen und das AusgabePanel im Center habe, funktioniert das Programm. ist optisch aber nicht das was ich mir vorstelle
- removeall() und jedesmal dann die Toolbar wieder einfügen, führt dazu, dass die Toolbar jedesmal neu eingesetzt wird, ansonsten das alte Problem, jeder Button nur 1x
Verständnisfragen:
- ist es überhaupt möglich auf diese Art und Weise JPanels (mit ihrem Inhalt) auszutauschen?
- ich hatte an anderer Stelle gelesen, dass Threadsicherheit evtl. ein Problem sein kann
Code:
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
public class fenster extends JFrame implements ActionListener
{
private JToolBar myToolBar = new JToolBar();
JButton JButton1 = new JButton("Button1") ;
JButton JButton2 = new JButton("Button2") ;
JPanel EingabePanel = new JPanel();
JPanel AusgabePanel = new JPanel();
...sämtliche Buttons, Textfelder etc...
public fenster (String textKopfzeile)
{
super (textKopfzeile);
this.setLocation(100,100);
this.setSize(800,600);
this.setVisible (true);
JToolBar myToolBar = new JToolBar();
getContentPane().add(myToolBar, BorderLayout.NORTH);
myToolBar.setBorder(BorderFactory.createEtchedBorder() );
JButton1.setText("Button1");
JButton1.addActionListener(this);
myToolBar.add(JButton1);
JButton2.setText("Button2");
JButton2.addActionListener(this);
myToolBar.add(JButton2);
}
public void addEingabe()
{
getContentPane().add (EingabePanel, BorderLayout.CENTER);
EingabePanel.add (Labels etc.);
System.out.println ("in addEingabe");
this.validate(); //this.repaint() kein Unterschied
}
public void remEingabe()
{
//EingabePanel.remove (Labels etc.);
getContentPane().remove (EingabePanel);
System.out.println ("in remEingabe");
this.validate();
}
//Methoden addAusgabe() und remAusgabe() sind im Aufbau wie addEingabe / remEingabe
public void actionPerformed (ActionEvent event)
{
String cmd = event.getActionCommand();
if (cmd.equals("Button1"))
{
System.out.println("Button1 gedrückt");
remAusgabe();
addEingabe();
}
else if (cmd.equals("Button2"))
{
System.out.println("Button2 gedrückt");
remEingabe();
addAusgabe();
}
}
}
Ich möchte nicht mit JTabs oder Childframes arbeiten. Momentan steckt mehr der Anreiz darin, das Problem zu lösen und nicht zu umgehen (ist eine Freizeitarbeit und dient für mich nur zum Erlernen von Swing)
Vielen Dank für Eure Hilfe