这个想法是让我的类有两种完全不同的方案,具体取决于它在其构造函数开始时收到的布尔值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的值)中创建一个吸气剂,并在另一个类中使用该吸气剂检索该值。但是,我总是会得到错误,这是正常的,因为我做了以下事情:


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

我在这里所做的不是获取已计算出的另一个类中的复选框的值,而是获取类EditorJob的另一个实例的值,这就是为什么我不断得到假的原因。


将复选框设置为静态字段,并尝试通过执行EditorJob.groupLogs在其他类中直接访问它---也不起作用,并且根据我在SO上看到的内容,应不惜一切代价避免这样做。
将复选框的值存储在我的数据库中,然后在另一个类中从那里检索它?仍然没有这样做,我想知道这是否是个好主意?


任何建议都将受到欢迎。

谢谢

最佳答案

您已突出问题:


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

我在这里做的是没有获得复选框的值
已经计算过的另一个类,我正在获取另一个的值
类EditorJob的实例,这就是为什么我不断出错的原因。


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

您可以使用的一种“ hack”是具有全局接口。以下是您想要的-但不会编译。我们尝试从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;
    }
}


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

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

07-28 04:50