这个想法是让我的类有两种完全不同的方案,具体取决于它在其构造函数开始时收到的布尔值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();
}
}