如何在其他类中更改JButton stat

时间:2014-06-24 20:24:58

标签: java swing

我有很多class.java文件,我需要在按钮所在的其他类中禁用/启用Button方法。 我有这样的代码 第一节

public class Main {

JFrame frame = new JFrame();

JButton b_X = new JButton("X");

 }

第二课

public class GUI extends Main{
Button B = new Button();

GUI(){
    frame.setVisible(true);
    frame.setSize(500, 500);
    frame.setLayout(null);
    frame.setLocation(400, 200);

    frame.add(b_X);

    b_X.setBounds(0, 0, 120, 20);

    b_X.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent evt){
                    B.call();
        update();

        }
    });

}
public int update(){
    //some uniportant code
}

public static void main(String[] args){
    new GUI();
}

}

第3课

public class Button extends Main{
UserMethods UM = new UserMethods();


public int call(){
    UM.m1();
    //Uniportant stuff..
}

 }

最后一节课

public class UserMethods extends Main{



public int m0(){
    if(n1 >= n2){
        n1 = 0;
        n2 = n2 + 40;
        n3++;
    }

    return n3;
}

public int m1(){
    //uniportant code again
    if(ASD == 0){
        b_X.setEnabled(false);

    }
    return XYZ;
}

}

代码更复杂,而且更大,但这些东西对于这个问题并不重要。

主要问题:

  

我需要以某种方式从最后的方法更新GUI类中的按钮b_X   UserMethods类。但是当我添加行GUI G = new GUI()到最后   class然后引用G.update(); (更新所有东西)我   创建无限循环,如C类指的是C3,C3到C4和C4到C2   (如果我做对了)并且Java弹出错误StackOverFlow ...   从第4节的方法中使用GUI类中的方法有什么帮助吗?   上课?

顺便说一句:不要介意我的代码风格,不介意我的英语,不介意别的。我需要帮助解决主要问题而不是其他东西..谢谢

2 个答案:

答案 0 :(得分:0)

尝试使用静态作为第一堂课:

public static class Main {

    public static JFrame frame = new JFrame();

    public static JButton b_X = new JButton("X");

}

然后你能够使用以下方法从另一个类访问它:

Main.b_x.someFunction();

答案 1 :(得分:0)

你永远不应该直接修改另一个对象的子组件,这将给你的逻辑带来很大的压力,因为你的类竞争强制执行什么是正确的状态的概念,并将你的程序置于不一致状态非常非常快

更好的解决方案之一是使用某种模型/控制器接口。您可以创建此模型/控制器的实例,并将其传递给其他类,可能是通过构造函数。

模型/控制器将定义每个类能够做什么,并定义可以通知状态变化的方法

每个班级将负责确定状态变化对他们意味着什么,并相应地更新他们自己

阅读Model-View-ControllerObserver Pattern了解更多详情。 Swing使用这些概念作为核心,因此低估它们将有助于您更好地理解整体API