Совместное использование переменных GUI без статических переменных - PullRequest
0 голосов
/ 21 января 2019

В настоящее время у меня есть графический интерфейс, в котором есть параметры, позволяющие пользователю выбрать способ запуска программы:

//Inside GUI.java, start button has clicked -> send all objects to Main class
private void startButtonClicked(MouseEvent e) {
    Main.setMain(selectedObj.getItemAt(selectedObj.getSelectedIndex()));
    Main.setOwnCar(userName.getText().trim());
    Main.enableNaps(weSleep.isSelected());
    Main.useOwnHouse(useOwnHouse.isSelected());
    if (weSleep.isSelected()) {
        Integer minSleep = (Integer) minVal.getValue();
        Integer maxSleep = (Integer) maxVal.getValue();
        Main.setSleepMinMax(minSleep, maxSleep);
    }
    setVisible(false);
}

Когда нажата кнопка запуска, я хочу передать все переменные из графического интерфейса восновной класс.Единственный способ, которым я знал, как это сделать, это использовать методы получения / установки, но они должны быть статическими:

static void setSleepMinMax(int min, int max) {
    sleepMin = min;
    sleepMax = max;
    Log("Sleeping debug: [min->" + min + "] [max->" + max + "]");
}

//Inside an infinite loop I have this which is at the top
//until the GUI is closed it does not start the rest of the program
if (gui.isVisible()) {
    Log("Waiting for GUI vars");
    return 1000;
}
if (!getOwnCar.isEmpty())
    Log("Using " + ownerCarName);

Большинство говорят, что избегают статических переменных.Как правильно, если я не могу использовать конструктор, потому что мой основной класс всегда работает, а GUI - это просто окно, которое можно открыть для изменения переменных по требованию?Возможно, перейдите по ссылке, аналогичной C ++?

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Запишите его в файл свойств и прочитайте его оттуда. Так что при следующем его использовании он может иметь предыдущие значения.

0 голосов
/ 22 января 2019

Дизайн на вашей стороне. Вы также можете передать ссылку на объект или использовать некоторые стандартные шаблоны проектирования (GOF - singleton).

Вы также можете посмотреть: Singleton

import java.util.Random;

public class PassVar {
private int mainVar = 0;
private MyObj myobj;
public static void main(String[] args) 
{
    PassVar pv = new PassVar();

    pv.new MyObj(pv);
    System.out.println("value="+pv.mainVar);
    pv.new ChangeValue(pv);
    System.out.println("value="+pv.mainVar);
    pv.new ChangeValue(pv);
    System.out.println("value="+pv.mainVar);

    pv.myobj = pv.new MyObj();
    System.out.println("myobj_i="+pv.myobj.i);
    pv.new MyObj(pv);
    System.out.println("myobj_i="+pv.myobj.i);
    pv.new MyObj(pv);
    System.out.println("myobj_i="+pv.myobj.i);

}
public void setMainVar(int i)
{
    mainVar = i;
}
    class ChangeValue
    {
        ChangeValue(PassVar pv)
        {
            pv.setMainVar(new Random().nextInt() %100);
        }
    }

    class MyObj
    {
        public int i=-1;
        MyObj() {}
        MyObj(PassVar pv)
        {
            i = 10+new Random().nextInt(10);
            pv.myobj = this;
        }

    }
}

Выход:

value=0
value=11 (random between -99 ... 99)
value=77

myobj_i=-1
//set obj.ref. in PassVar from MyObj
myobj_i=18 (random between 10 ... 19)
myobj_i=12
...