Получение состояния JCheckBox для другого класса в Java? - PullRequest
0 голосов
/ 15 января 2020

Идея состоит в том, чтобы иметь два совершенно разных сценария ios для моего класса в зависимости от значения логического 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, я хочу получить это значение в конструкторе выше. Проблема в том, что я до сих пор не смог этого сделать, потому что значение всегда ложно, даже когда оно истинно, что означает, что класс EditorPaneJobLog не получает значение.

То, что я пробовал до сих пор:

  1. Создайте метод получения в классе EditorJob (где вычисляется значение JCheckBox) и используйте метод получения в другом классе для получения значения. Тем не менее, я всегда получаю false, что является нормальным, потому что я сделал следующее:

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

То, что я делаю здесь, не получает значение флажка в другой класс, который был вычислен, я получаю значение другого экземпляра класса EditorJob, поэтому я продолжаю получать значение false.

Установите флажок в поле stati c и попробуйте получить к нему доступ непосредственно в другом классе, выполнив EditorJob.groupLogs --- Также не сработало, и, согласно тому, что я видел на SO, оно должно следует избегать любой ценой.

Сохранить значение флажка в моей базе данных и затем извлечь его оттуда в другом классе? Все еще не сделали этого, и мне было интересно, если это хорошая идея или нет?

Любые предложения приветствуются.

Спасибо

1 Ответ

0 голосов
/ 15 января 2020

Вы выдвинули на первый план проблему:

EditorJob editorJob = new EditorJob(); editorJob.getGroupLogs ----> всегда false

Я не получаю значение флажок в другом классе, который был рассчитан, я получаю значение другого экземпляра класса EditorJob, поэтому я продолжаю получать ложь.

Вы должны убедиться, что editorJob единственный экземпляр (или если вы планируете иметь несколько, хотя бы один и тот же экземпляр EditorJob), который вас интересует.

Один «хак», который вы можете использовать, имеет глобальный интерфейс. Следующее - это то, что вы хотите - но оно не скомпилируется. Мы пытаемся получить доступ к некоторому методу класса B из класса A.

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