加载设置JAVA后更新GUI组件

时间:2017-04-14 11:40:43

标签: java user-interface combobox preferences jslider

我的应用程序主要是带有滑块和组合框的GUI。我使用滑块和组合来更改项目中各个类的值和参数。我试图实现保存和加载这些参数的可能性,我已经使用首选项API完成了这项工作。 我可以保存和加载参数,但是当我加载它们时,我可以看到值的变化,因此可以工作,但GUI不会更新以反映这些新值。有没有办法告诉GUI这样做?

例如,我有一个频率滑块可以改变振荡器中的频率值。如果我用滑块更改值,保存它,再次更改滑块的值然后加载保存的值,我可以听到它已经改变但是滑块没有移动。(因为我没有&#39 ; t也告诉它)。我能以某种方式将滑块的位置与该频率值绑定吗?

GUI

    //OSC1 slider
    JSlider Osc1FreqSlider = new JSlider(SwingConstants.HORIZONTAL, MIN_OSC_FREQ, MAX_OSC_FREQ, NOTE_A_FREQ);
    Osc1FreqSlider.setOpaque(false);
    Osc1FreqSlider.setMajorTickSpacing(50000);
    Osc1FreqSlider.setMinorTickSpacing(50);

Osc1FreqSlider.addChangeListener(new ChangeListener() {
        public void stateChanged(ChangeEvent e) {
            JSlider source = (JSlider) e.getSource();
            settings.setOsc1Freq((float)source.getValue()/100);

        }
    });

设置类

public void setOsc1Freq(float freq) {
    m_Osc1Freq = freq;
}

2 个答案:

答案 0 :(得分:0)

setOsc1Freq( freq )后,你必须jSlider.setValue( freq )

我在自己的项目中这样做的方式是我从不使用像float freq这样的独立原始值;相反,我有一个带有getter和setter的可观察类,当值发生变化时会发出一个事件,然后我将每一个控件包装在另一个知道如何与这样一个observable进行交互的类中。因此,每次控件的值发生变化时,observable中的值也会发生变化,而且每次我的程序更改observable的值时,控件也会注意并自行更新。

我认为在没有这个功能的情况下编写任何类型的gui几乎是不可能的,但显然我似乎与无数gui框架的存在相矛盾,这些gui框架不支持这个并强迫你重新使用发明。

答案 1 :(得分:0)

(代表OP发布)

我通过拆分组件声明,将它们移动到另一个单例类,创建存取方法然后在gui类中将变量分配给getter来解决我的问题。