Tôi đang cố gắng xây dựng một ứng dụng MVC trong Java Swing. Tôi có một JPanel có chứa bốn JComboBox và JPanel này được nhúng vào một phụ huynh JPanel. Phụ huynh JPanel có các điều khiển khác ngoài con JPanel.cách kích hoạt một hành động trong JPanel mẹ khi một thành phần trong một JPanel con được cập nhật (Java Swing)
Mô hình con JPanel được cập nhật chính xác bất cứ khi nào tôi thay đổi giá trị của JComboBoxes (về cơ bản là bộ chọn ngày có một hộp kết hợp mỗi năm, tháng, ngày trong tháng và giờ trong ngày). Những gì tôi không thể tìm ra là làm thế nào tôi có thể kích hoạt mô hình của cha mẹ JPanel để cập nhật chính nó để phù hợp với giá trị được lưu trữ trong mô hình con JPanel bất cứ khi nào một trong những JComboBoxes được thay đổi.
Dưới đây là một SSCCE bị tước bỏ cấu trúc của những gì tôi có cho đến nay. Cảm ơn bạn.
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?");
}
}
}
Cha mẹ nên có người nghe trên mô hình của trẻ. –
Hoặc bạn có thể _forward_ sự kiện cho phụ huynh, như được hiển thị [ở đây] (http://stackoverflow.com/q/2159803/230513). – trashgod