2010-09-16 93 views
1

我了解"How to Use Actions"教程,但无法弄清楚如何使它在多个JFrame表单之间工作。 我尝试使用updateComboBox方法public static,以便可以从其他表单访问 ,但由于自动生成的非静态变量jComboBox无法从静态上下文中引用,NetBeans IDE拒绝允许它。 主窗体包含一个JComboBox,需要根据用户输入(菜单,按钮,文本字段等)进行修改。 部分小部件位于主窗体上,其他部件位于辅助窗体上。 例如,主窗体使辅助窗体可见;辅助表单会对配置进行一些更改;那么用户通过按SAVE按钮隐藏辅助表单。 辅助表单如何最好让主表单知道配置已更新,现在需要将更改应用到JComboBox? 行动是否适合这一点或者是否会采取其他方法更合适?如何在java swing表单之间发送信号?

public class Controller extends javax.swing.JFrame { 
    ... 
    private javax.swing.JComboBox jComboBox; 
    private void updateComboBox() { 
     String[] names = Configuration.getNames(); 
     for (String n : names) { 
      jComboBox.addItem(n); 
     } 
     ... 

回答

5

如何控制器类将举行到您的框架的引用和管理信号你需要什么?您还可以查看Observer模式,其中您的主窗体将监听由辅助窗体所做的更改。

+0

提及观察者模式+1。 – huo73 2010-09-17 08:23:13

+0

以前从未(有意)使用过设计模式,但那是完美的解决方案。谢谢。 – jacknad 2010-09-17 12:52:46

1

由于第二种形式进行了一些设置修改,我假设用户在搞乱设置的同时,想禁止用户使用主应用程序。

您可以做的是创建第一个窗体,然后在第一个窗体中创建设置窗体。然后,您可以使用线程同步(例如锁定)使第一个表单等待,直到用户按下设置表单上的“OK按钮”。一旦按下“OK按钮”,锁就会被移除,第一种形式将通过调用第二种形式的方法继续执行,以便它可以访问用户刚输入的数据。