【问题标题】:What's the appropriate listener for JComboBox for updating itself?JComboBox 更新自身的合适监听器是什么?
【发布时间】:2013-09-04 01:03:59
【问题描述】:

我有一个 JComboBox,它的项目每秒都会与程序的其他部分一起更新。当用户尝试在那里键入任何内容或尝试从 JComboBox 中选择一个项目时,我需要一个监听器,它会更新它的内容并显示添加的新项目。我使用了actionPerformed,但它带来了新项目,但用户无法选择然后我使用itemStateChanged,但程序崩溃了,我不得不关闭netbeans!

回答: 我的 JcomboBox 在 JPanel 上。我想出的最好方法是在 JPanel 上添加侦听器,这样 JPanel 上的任何元素甚至 JcomboBox 都会被点击,它会更新组合框。


我的 JcomboBox 在 JPanel 上。我想出的最好方法是在 JPanel 上添加侦听器,这样 JPanel 上的任何元素甚至 JcomboBox 都会被点击,它会更新组合框。

【问题讨论】:

  • “听起来”你可能会发生竞争情况。你是否使用任何线程来更新内容?
  • @Woody 那是当用户选择一个项目但我想要在那之前。
  • 崩溃了,我不得不关闭 netbeans!对,我在 Netbeans5 中看到了,是时候更新了
  • 请出示证明问题的SSCCE

标签: java swing event-handling jcombobox


【解决方案1】:

影响组合框内容的事件由model 生成。

尝试将ListDataListener 附加到模型本身。

如果您担心在/如果模型发生更改时收到通知,则需要将 PropertyChangeListener 附加到 JComboBox 并监视 model 属性并相应地更新您的数据侦听器...

【讨论】:

  • 我正在尝试使用 ArrayList 初始化模型,但它给出了语法错误。有什么想法吗?
  • 我不认为ComboBoxModel 接受ArrayList 作为一个可行的参数。你试过阅读JavaDocs吗?
【解决方案2】:

ItemListener 当用户选择不同的项目时。

KeyListener 用于当用户输入JComboBox 时。

也许你的程序一直崩溃是因为你没有为你的JComboBox 使用模型(我假设你一直在重新设置所有项目)

【讨论】:

  • 恕我直言 - KeyListener 是监视组合框编辑器更改的糟糕选择,因为如果用户将内容粘贴到编辑器中(例如),它将不会被触发。更好的选择可能是DocumentListener,这取决于您希望实现的目标...
  • 是的,每次我删除所有项目然后我说 combo1.addItem()
  • @MadProgrammer 是的,我就是这么想的,但我的印象是他想检查用户是否正在尝试输入JComboBox。也许我误解了。 :(
  • @JoshM 我会小心KeyListeners,他们有很多缺点,仅此而已
猜你喜欢
  • 1970-01-01
  • 2010-09-08
  • 2011-09-26
  • 2011-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-16
相关资源
最近更新 更多