Guten Tag,
Ich habe eine Applikation, die zum einen Teil aus einer JMenuBar und zum anderen aus einem Panel besteht, welche beide zs auf einem JFrame platziert werden.
Ich suche jetzt nach einer guten Möglichkeit beide Sache miteinander kommunizieren zu lassen.
Da ich gerade daran verzweifle mein Problem vernünftig in Worte zu fassen, werde ich das ganze mit einem KKB ( oder wie das heißt ) verdeutlichen.
Sobald der User auf den Button btn klickt sollen die MenuItems Copy und Paste auf enabled(false) gesetzt werden.
Mein Gedanke war jetzt, dass man dort ganz gut mit einem Observer Pattern arbeiten könnte, allerdings wird das zunehmend unübersichtlich je mehr MenuItems man in seinem Menu/MenuBar hat. Das MainFrame wäre das Observable und das TestPanel demnach der Observer. Also regisitriert man beim TestPanel jetzt das MeinFrame als Observable. Wenn das Panel jetzt nur einen Button und das MainFrame nur wenige MenuItems hat ist das kein Problem, denn sobald der Button geklickt wurde wird die update() Methode des MainFrames aufgerufen und die nötigen Änderungen an den MenuItems werde vorgenommen.
Hat man jetzt allerdings mehrere Buttons und dazu auch noch eine Vielzahl an MenuItems, muss ich ja irgendwie unterscheiden, welche Button gedrückt wurde und welche MenuItems dann verändert werden sollen. Für jeden neuen Button ein eigenen Oberserver/Observable zu schreiben wäre nicht gerade ein schöner Stil.
Ein solches Problem gibt es doch bestimmt in jeder größeren Applikation, sobald eine MenuBar eingesetz wird, hat jmd damit evtl schon Erfahrung gemacht und hat ein Pattern, oder Muster o.ä. welches die Kommunikation zwischen einer MenuBar und anderen Componenten vereinfacht ?
Ich bin gerade etwas ratlos, weil ich nicht wirklich einen Ansatz habe und wäre sehr dankbar über jeden Hinweis.
Ich habe eine Applikation, die zum einen Teil aus einer JMenuBar und zum anderen aus einem Panel besteht, welche beide zs auf einem JFrame platziert werden.
Ich suche jetzt nach einer guten Möglichkeit beide Sache miteinander kommunizieren zu lassen.
Da ich gerade daran verzweifle mein Problem vernünftig in Worte zu fassen, werde ich das ganze mit einem KKB ( oder wie das heißt ) verdeutlichen.
Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
public class TestPanel extends JPanel {
private JButton btn;
public TestPanel() {
btn = new JButton("Enable,Disable");
btn.addActionListener(new TestPanelActionListener());
add(btn);
}
class TestPanelActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// Jetzt sollen hier die Copy und Paste MenuItems
// enabled bzw disaled werden
}
}
}
Java:
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
public class MainFrame extends JFrame {
private JMenuItem miCopy, miPaste, miSayHello;
public MainFrame() {
JMenuBar bar = new JMenuBar();
JMenu menuEdit = new JMenu("Edit");
miCopy = initMenuItem("Copy", menuEdit);
miPaste = initMenuItem("Paste", menuEdit);
JMenu menuTalk = new JMenu("Talk");
miSayHello = initMenuItem("SayHello", menuTalk);
bar.add(menuEdit);
bar.add(menuTalk);
setJMenuBar(bar);
add(new TestPanel());
pack();
setVisible(true);
}
private JMenuItem initMenuItem(String text, JMenu menu) {
JMenuItem menuItem = new JMenuItem(text);
menu.add(menuItem);
return menuItem;
}
public static void main(String[] args) {
new MainFrame();
}
}
Sobald der User auf den Button btn klickt sollen die MenuItems Copy und Paste auf enabled(false) gesetzt werden.
Mein Gedanke war jetzt, dass man dort ganz gut mit einem Observer Pattern arbeiten könnte, allerdings wird das zunehmend unübersichtlich je mehr MenuItems man in seinem Menu/MenuBar hat. Das MainFrame wäre das Observable und das TestPanel demnach der Observer. Also regisitriert man beim TestPanel jetzt das MeinFrame als Observable. Wenn das Panel jetzt nur einen Button und das MainFrame nur wenige MenuItems hat ist das kein Problem, denn sobald der Button geklickt wurde wird die update() Methode des MainFrames aufgerufen und die nötigen Änderungen an den MenuItems werde vorgenommen.
Hat man jetzt allerdings mehrere Buttons und dazu auch noch eine Vielzahl an MenuItems, muss ich ja irgendwie unterscheiden, welche Button gedrückt wurde und welche MenuItems dann verändert werden sollen. Für jeden neuen Button ein eigenen Oberserver/Observable zu schreiben wäre nicht gerade ein schöner Stil.
Ein solches Problem gibt es doch bestimmt in jeder größeren Applikation, sobald eine MenuBar eingesetz wird, hat jmd damit evtl schon Erfahrung gemacht und hat ein Pattern, oder Muster o.ä. welches die Kommunikation zwischen einer MenuBar und anderen Componenten vereinfacht ?
Ich bin gerade etwas ratlos, weil ich nicht wirklich einen Ansatz habe und wäre sehr dankbar über jeden Hinweis.