从其他方法访问GUI对象

时间:2016-11-01 19:17:39

标签: java swing user-interface

我正在尝试访问一个属于我的GUIClass的变量,所以我创建了一个新类,我实例化我的静态GUI并给它一个setter,并从另一个GUI类中调用这个setter来获取所有变量我需要。

这是正确的方法还是有更好的方法?

public class Master {

    static NormalDistributionUI ndUI;

    public static NormalDistributionUI getNdUI() {
        return ndUI;
    }

    public static void main(String[] args) {
        ndUI = new NormalDistributionUI();

        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                ndUI.setVisible(true);
            }
        });
    }

}

自从我将主要课程转移到本课程后,还有一件事我不知道现在要做什么:

   try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Windows".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }

或者更确切地说,应该在GUI构造函数中执行此操作?

编辑:图片展示了我想要实现的目标 enter image description here

2 个答案:

答案 0 :(得分:2)

我会考虑使用M-V-C or Model-View-Controller design pattern或其中的一个变种

  • 您的模型包含您的数据表
  • 它还包含有关所选集成类型的信息
  • 控件将侦听“首选项”对话框中的响应并通知模型所做的选择
  • 这将改变模型的状态:它的集成类型会发生变化,并且可能会根据此集成类型重新计算其数据。
  • 视图侦听模型中的更改(在一个MVC版本中),然后在数据更改模型通知时重新显示新数据。

答案 1 :(得分:1)

制作GUI类singleton。您的代码最后应如下所示。 (当然使用@Hovercraft Full Of Eels建议)

 public class NormalDistributionUI { 

         private static NormalDistributionUI _instance = null; 

         /*It's important that the constructor is private*/ 
         private NormalDistributionUI(){ 
                 //constructor 
         } 

         // your class body 


         /* public static method to retrieve your instance */
         public static NormalDistributionUI getInstance(){ 
                 if(_instance == null) 
                         _instance = new NormalDistributionUI(); 
                 return _instance; 
         } 
 } 

 /* your Master class goes like this */
 public class Master { 

         //your class 

         public static void main(String[] args) { 

                 java.awt.EventQueue.invokeLater(new Runnable() { 
                         public void run() { 
                                 NormalDistributionUI.getInstance().setVisible(true); 
                         } 
                 }); 
         } 

 }