java - 将 JCheckBox 的状态获取到 Java 中的另一个类?

标签 java swing jcheckbox

这个想法是让我的类根据它在构造函数开始时接收到的 boolean 值 isGroupLogsChecked 的值来实现两种完全不同的场景:

private boolean     isGroupLogsChecked      = false;

public EditorPaneJobLog()
{
    if (isGroupLogsChecked){
        createLayoutForGroupedLogs();
    }
    else {
        createLayout();
    }
        initDefault();
        initListener();
}

为了使其正常工作,值 isGroupLogsChecked 必须等于在不同类中计算的复选框 groupLogs 的状态。

private JCheckBox    groupLogs      = new JCheckBox(Res.getIntl(Constants.RES+"$GroupLogs"));

选中该复选框后,groupLogs.isSelected() 应返回 (true),这正是它在其类中具有的值。

我现在想做的是,根据复选框groupLogs的值,我想在上面的构造函数中检索该值。问题是,到目前为止我未能做到这一点,因为该值始终为 false,即使它是 true,这意味着 EditorPaneJobLog 类未获取该值。

到目前为止我已经尝试过:

  1. EditorJob 类(计算 JCheckBox 的值)中创建一个 getter,并使用其他类中的 getter 来检索该值。但是,我总是得到错误,这是正常的,因为我所做的是以下内容:

EditorJob editorJob = new EditorJob(); editorJob.getGroupLogs ----> 始终为 false

我在这里所做的并不是获取已计算的其他类中复选框的值,而是获取 EditorJob 类的另一个实例的值,这就是为什么我一直得到 false。

  • 使复选框成为静态字段,并尝试通过执行 EditorJob.groupLogs 在另一个类中直接访问它 --- 也不起作用,根据我所看到的所以,应该不惜一切代价避免这种情况。

  • 将复选框的值存储在我的数据库中,然后从另一个类中检索它?还没有这样做,我想知道这是一个好主意吗?

  • 欢迎任何建议。

    谢谢

    最佳答案

    您已经突出显示了问题:

    EditorJob editorJob = new EditorJob(); editorJob.getGroupLogs ----> always false

    What I'm doing here is not getting the value of the checkbox in the other class that has been calculated, I'm getting the value of another instance of the class EditorJob, that's why I keep getting false.

    您需要确保 editorJob 是您关心的唯一实例(或者如果您计划拥有多个,至少是相同的 EditorJob 实例)。

    您可以使用的一个“技巧”是拥有一个全局界面。 以下是您想要的 - 但它不会编译。我们尝试从 A 类访问 B 类的某些方法。

    public class Test {
        public static void main(String[] args) {
            A classA = new A();
            B classB = new B();
            classA.getStuffFromB();
        }
    }
    
    class A {
        public A() { }
    
        public void getStuffFromB() {
            // Error because classB will not be able to resolved
            System.out.println(classB.getSomething());
        }
    }
    
    class B {
        public B() { }
    
        public int getSomething() {
            return 42;
        }
    }
    

    相反,我们可以创建一个新的接口(interface),Globals,来容纳我们的类的实例。我们想要调用另一个类的每个类都必须实现我们的新接口(interface)。

    public interface Globals {
        A classA = new A();
        B classB = new B();
    }
    

    现在,我们可以毫无错误地调用 getStuffFromB() 了。

    public class Test implements Globals {
        public static void main(String[] args) {
            classA.getStuffFromB();
        }
    }
    
    class A implements Globals {
        public A() { }
    
        public void getStuffFromB() {
            System.out.println(classB.getCheckBool());
        }
    }
    
    class B {
        private JCheckBox check = new JCheckBox();
    
        public B() {
            check.setSelected(true);
        }
    
        public int getSomething() {
            return check.isSelected();
        }
    }
    

    关于java - 将 JCheckBox 的状态获取到 Java 中的另一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59752168/

    相关文章:

    java - 当我在 Application 的构造函数中调用 android.content.Context.getApplicationContext() 时,为什么会出现 NPE?

    java - 如何检测从一项 Activity 到另一项 Activity 的转变?

    java - 如何为 jradiobutton 添加圆形边框

    java - 扩展 JScrollPane 以在其中包含文本区域

    java - 如何在java中为复选框文本编写上标单词?

    java - 如何将复选框树的复选框设置为禁用?

    java - 为什么 Java 8 u31 中不再有时区文件?

    java - 如何确保多个 Guava 缓存不互相锁定?

    java - 为什么这个圆圈没有被涂抹

    java - 如何设置JTable中的JCheckbox可编辑?