Próbuję zbudować aplikację MVC w Java Swing. Mam JPanel, który zawiera cztery JComboBoxy i ten JPanel jest osadzony w nadrzędnym JPanelu. Rodzic JPanel oprócz kontroli nad dzieckiem JPanel ma inne kontrole.jak wywołać akcję w nadrzędnym JPanel, gdy komponent w dziecięcej JPanel jest aktualizowany (Java Swing)
Dziecko modelu JPanel dostaje poprawnie zaktualizowane ilekroć zmienić wartości JComboBoxes (to w zasadzie wyboru daty z jednego pola kombi każdy rok, miesiąc, dzień miesiąca, godzinę i dzień). Nie mogę zrozumieć, w jaki sposób mogę wyzwolić macierzysty model JPanela, aby zaktualizował się, aby dopasować wartość przechowywaną w dziecięcym modelu JPanela za każdym razem, gdy zmieni się jeden z JComboBoxów.
Poniżej znajduje się uproszczona struktura SSCCE tego, co dotychczas posiadałem. Dziękuję Ci.
import java.awt.event.*;
import javax.swing.*;
public class Example extends JFrame {
public Example() {
super();
OuterView theGUI = new OuterView();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
add(theGUI);
pack();
setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new Example();
}
});
}
}
class OuterView extends JPanel {
public OuterView() {
super();
InnerView innerPanel = new InnerView();
JButton button = new JButton("display OuterView's model");
button.addActionListener(new ButtonListener());
add(innerPanel);
add(button);
}
private class ButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent ae) {
System.out.println("button was clicked");
}
}
}
class InnerView extends JPanel {
public InnerView() {
super();
String[] items = new String[] {"item 1", "item 2", "item 3"};
JComboBox comboBox = new JComboBox(items);
comboBox.addActionListener(new ComboBoxListener());
add(comboBox);
}
private class ComboBoxListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent ae) {
String text = ((JComboBox) ae.getSource()).getSelectedItem().toString();
System.out.println("store " + text + " in InnerView's model");
System.out.println("now how do I cause OuterView's model to be updated to get the info from InnerView's model?");
}
}
}
Rodzic powinien mieć słuchacza na modelu dziecka. –
Lub możesz _do góry_ wydarzenie rodzicowi, jak pokazano [tutaj] (http://stackoverflow.com/q/2159803/230513). – trashgod