gpt4 book ai didi

java - 加载JAVA设置后更新GUI组件

转载 作者:太空宇宙 更新时间:2023-11-04 11:34:43 25 4
gpt4 key购买 nike

我有一个带有 GUI 的应用程序,主要带有 slider 和组合框。我使用 slider 和组合来更改项目中各个类中的值和参数。我正在尝试实现保存和加载此参数的可能性,并且我已经使用首选项 API 做到了这一点。我可以保存和加载参数,但是当我加载它们时,我可以看到值的变化,这样可以工作,但 GUI 不会更新以反射(reflect)这些新值。有没有办法告诉 GUI 这样做?

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

图形界面

    //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;
}

最佳答案

setOsc1Freq( freq )之后,您必须执行jSlider.setValue( freq )

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

我认为如果没有这个功能,几乎不可能编写任何类型的 gui,但显然我似乎对存在的无数 gui 框架不支持此功能并迫使你重新发明感到矛盾。

关于java - 加载JAVA设置后更新GUI组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43410812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com