java + swing + mvc:如何使用多个控件进行接口的模型?

我有这个我正在研究的S​​wing应用程序,它有一对JSliders和JTextFields,它们都显示和控制两个数字的值。 现在,我将各种各样的东西混合起来使其工作,拦截变更事件并更新显示。 但是我想更好的方法是制作一个具有两个数字的模型,并以某种方式将此模型链接到我的GUI视图。 我知道如何制作一个模型,但我对如何将其链接到我的GUI视图有点遗失…任何建议?

更新:我的模型准备就绪+包括触发属性更改。 我想我想使用某种数据绑定方法(例如JGoodies绑定),但我不确定如何… JGoodies Binding不支持滑块。

编辑:还要注意,当滑块改变位置时,文本字段应该改变它的值; 当文本字段改变值时,滑块应改变位置; 当模型更改值时,文本字段+滑块都应更新。

替代文字

要保持两个组件同步,只需让每个组件的EventListener更新另一个组件。 这是连接JSlider和JSpinner的示例:

public class SpinSlider extends JPanel { public static void main(String args[]) { EventQueue.invokeLater(new Runnable() { @Override public void run() { JFrame frame = new JFrame("SpinSlider"); frame.add(new SpinSlider()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } }); } public SpinSlider() { this.setLayout(new FlowLayout()); final JSpinner spinner = new JSpinner(); final JSlider slider = new JSlider(); slider.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { JSlider s = (JSlider) e.getSource(); spinner.setValue(s.getValue()); } }); this.add(slider); spinner.setModel(new SpinnerNumberModel(50, 0, 100, 1)); spinner.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { JSpinner s = (JSpinner) e.getSource(); slider.setValue((Integer) s.getValue()); } }); this.add(spinner); } } 

您可以定义模型并将其传递给构造函数中的视图。

没有尝试过代码,但它可能看起来像这样:

 public class MyView extends JPanel /*JFrame, whatever*/ { private MyModel myModel; public MyView(MyModel myModel) { this.myModel = myModel; // build GUI // ... textfield1.setText(String.valueOf(myModel.getValue1())); } // this is what you do when a control changes: public void value1Changed(int newValue) { myModel.setValue1(newVvalue); } } public class MyModel { private int value1; // getters, setters // ... }