gpt4 book ai didi

Java/Swing : Update data on stateChange

转载 作者:行者123 更新时间:2023-11-30 07:36:12 26 4
gpt4 key购买 nike

我有一个 Map.Entry<String,Integer> 的列表这是我正在循环的,并且对于每一个,制作一个 JLabel/JSpinner代表该特定条目。

我怎样才能做到,当 ChangeListenerJSpinner 上触发, 它会更新该条目以反射(reflect)新值?

我的代码看起来像

for (Map.Entry<String,Integer> entry : graph.getData()) {
SpinnerNumberModel model = new SpinnerNumberModel(
entry.getValue(),(Integer)0,(Integer)100,(Integer)5);
JSpinner spinner = new JSpinner(model);

JLabel label = new JLabel(entry.getKey());

spinner.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
entry.setValue((Integer)((JSpinner)e.getSource()).getValue());
}
});

// more stuff
}

但是,这是行不通的,因为条目要么需要是最终级别的,要么是对象级别的,但两者都不是。

有没有更简单的方法,比如 C# 的 dataSource直接将对象绑定(bind)到微调器?或者我怎样才能让它发挥作用?

最佳答案

如果您想坚持使用个人,有多种选择 JLabelJSpinner .如果 map 可能变大,请使用@trashgod 的回答。

  1. 根据@Suresh Kumar 的评论错误:final Map.Entry<String,Integer> entry
  2. 错误添加spinner.putClientProperty("MyEntryKey", entry) ,然后在您的 ChangeListener 中获取带有 spinner.getClientProperty 的条目.
  3. 添加spinner.putClientProperty("MyEntryKey", entry.getKey()) ,然后在您的 ChangeListener graph.put(spinner.getClientProperty(), ...) .
  4. 来自@Michael 的回答(不确定这是否合乎道德):添加 final String key = entry.getKey() ,然后在您的 ChangeListener graph.put(key, ...) .
  5. 让您的封闭类实现 ChangeListener避免一个 ChangeListenerJSpinner :

    public void stateChanged(ChangeEvent e) { JSpinner 微调器 = (JSpinner)e.getSource(); graph.put((String)spinner.getClientProperty("MyEntryKey"), (Integer)spinner.getValue());

顺便说一句 graph.getData()看起来有点奇怪。如果graph工具 Map , 你应该使用 graph.entrySet() .

关于Java/Swing : Update data on stateChange,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3775253/

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