java JButton setEnabled 无法正常工作

问题描述 投票:0回答:1

我有一个默认为

setEnabled(false)
的 JButton,然后如果另一个类的条件为 true,则该按钮将被启用,但该按钮根本没有被启用。所有 3 个类都来自同一个包。

Main.java(主类)

import javax.swing.JFrame;

public class Main {

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        OtherClass c1 = new OtherClass();
        Panel p = new Panel();
        frame.add(p);
        frame.setSize(300,300);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        //p.setButtonEnabled();
    }
    
}

Panel.java

import javax.swing.JButton;
import javax.swing.JPanel;

public class Panel extends JPanel{
    JButton b1 = new JButton("OK"); ;
    
    public Panel(){
        b1.setSize(50, 50);
        b1.setEnabled(false);
        add(b1);
    }
    
    public void setButtonEnabled(){
        b1.setEnabled(true);
    }
}

OtherClass.java

public class OtherClass {
    Panel p1 = new Panel();
    
    //some method
    public void method(){ 
        if (true){
            p1.setButtonEnabled();
        }
    }
}

但是当我从 main 方法中调用

setButtonEnabled()
方法时,它以某种方式起作用了,有人可以解释为什么以及如何修复它,我刚刚学习 Java 大约一个月,这是我第一次使用 Swing,非常感谢。

java swing jbutton
1个回答
0
投票

按钮的状态不受影响,因为 setButtonEnabled() 是在单独的 Panel 实例上调用的,这不会反映在 main 方法中添加到框架的实例。

public class Main {

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        Panel p = new Panel();
        OtherClass c1 = new OtherClass(p); // Pass the Panel instance to OtherClass
        frame.add(p);
        frame.setSize(300, 300);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

public class OtherClass {
    private Panel p1;

    public OtherClass(Panel p1) {
        this.p1 = p1;
    }
    
    public void method(){ 
        if (true){
            p1.setButtonEnabled();
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.