Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将JCheckBox的状态获取到Java中的另一个类?_Java_Swing_Jcheckbox - Fatal编程技术网

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

将JCheckBox的状态获取到Java中的另一个类?,java,swing,jcheckbox,Java,Swing,Jcheckbox,这个想法是让我的类有两个完全不同的场景,具体取决于它在构造函数开始时收到的布尔值isGroupLogsChecked: private boolean isGroupLogsChecked = false; public EditorPaneJobLog() { if (isGroupLogsChecked){ createLayoutForGroupedLogs(); } else { createLayout();

这个想法是让我的类有两个完全不同的场景,具体取决于它在构造函数开始时收到的布尔值
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
类没有获得该值

到目前为止,我所尝试的:

  • EditorJob
    类(计算JCheckBox值的地方)中创建一个getter,并使用另一个类中的getter检索该值。然而,我总是得到错误,这是正常的,因为我所做的是:
  • EditorJob EditorJob=new EditorJob();
    editorJob.getGroupLogs-->always false

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

  • 将复选框设为静态字段,并尝试通过执行
    EditorJob在另一个类中直接访问它。groupLogs
    ---也不起作用,根据我在上面看到的,应该不惜一切代价避免它

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

  • 欢迎提出任何建议


    谢谢

    您已经强调了问题:

    EditorJob EditorJob=new EditorJob()editorJob.getGroupLogs-->
    总是假的

    我在这里做的不是获取 其他已经计算过的类,我得到另一个类的值 类EditorJob的实例,这就是为什么我不断得到错误

    您需要确保
    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;
        }
    }
    
    public interface Globals {
        A classA = new A();
        B classB = new B();
    }
    
    相反,我们可以创建一个新的接口,
    Globals
    ,以容纳类的实例。我们要从中调用另一个类的每个类都必须实现我们的新接口。

    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;
        }
    }
    
    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();
        }
    }
    

    谢谢你的帮助。我尝试了你的方法,但复选框的值仍然为false,即使在其原始类中该值为true。如果你可以在原始问题中发布一个,我可以复制/粘贴并运行它,这将更容易提供帮助。@JesseJames我还编辑了我的答案,以包含一个JCheckBox。我在类B的构造函数中将其设置为true,并从类A获取值。它返回true-因此您的情况可能存在其他问题。