代码之家  ›  专栏  ›  技术社区  ›  jacknad

为什么jcomboBox似乎添加了多个项实例?

  •  0
  • jacknad  · 技术社区  · 15 年前

    此JavaSwing JCOMBOBOX是基于系统配置的更改而修改的。 在示例图像中,“按下选择”是指没有选择任何内容,并且配置中有一个“测试单元”,但下拉列表中显示两次“按下选择”。附加的“按下选择”项的行为类似于项0,因此它是功能性的,但这样看起来很糟糕。有什么想法吗?

    公共类控制器扩展javax.swing.jframe实现观察者{ … 公共void更新(observable o,object arg){ jcombobox.removeAllitems(); jcombobox.additem(“按选择”); string[]name=configuration.getNames(); for(字符串n:名称){ 添加项(n); } … < /代码>

    系统配置。 在示例图像中,“按下选择”是指没有选择任何内容,并且配置中有一个“测试单元”,但下拉列表中显示两次“按下选择”。附加的“按下选择”项的行为类似于项0,因此它是功能性的,但这样看起来很糟糕。有什么想法吗?

    public class Controller extends javax.swing.JFrame implements Observer {
        ...
        public void update(Observable o, Object arg) {
            jComboBox.removeAllItems();
            jComboBox.addItem("Press to Select");
            String[] names = Configuration.getNames();
            for (String n : names) {
                jComboBox.addItem(n);
            }
            ...
    

    2 回复  |  直到 8 年前
        1
  •  0
  •   Barend    15 年前

    update 方法由事件调度线程或其他线程调用?(原木) SwingUtilities.isEventDispatchThread() 如果你不确定)。如果是其他线程,请将更新移动到 Runnable 使用 SwingUtilities.invokeLater() 安排在EDT上执行。

    尝试 setSelectedItem(null) 作为更新的一部分。

        2
  •  0
  •   jacknad    15 年前

    愚蠢的错误添加两次(@geoffrey)。在另一个类中查找第二个外接程序花费的时间太长。我奶奶警告我不要老。