【问题标题】:JPanel not refreshing upon selection with JComboBox使用 JComboBox 选择时 JPanel 不刷新
【发布时间】:2023-03-10 01:22:01
【问题描述】:

我正在尝试编写一个非常短的类,将 JPanel 与 JComboBox “联系起来”。我想我的逻辑是错误的,但是当我使用 JComboBox 选择新的东西时没有任何反应......这是(或多或少)我的代码:

private DisplayPanel currentDisplay; //a displaypanel is simply an extended JPanel with an id field, and an overriden .equals() method
private JComboBox selector;
private List<DisplayPanel> displays;

public SelectionPanel(DisplayPanel panel){
    displays = new ArrayList<DisplayPanel>();
    selector = new JComboBox(new String[]{panel.id});
    currentDisplay = panel;
    selector.addActionListener(this);
    this.add(selector);
    this.add(currentDisplay);
    this.displays.add(panel);
}

public void addNewSelection(DisplayPanel panel){
    displays.add(panel);
    selector.addItem(panel.id);
}


@Override
public void actionPerformed(ActionEvent e) {
    JComboBox source = (JComboBox) e.getSource();
    String id = (String) source.getSelectedItem();
    for(DisplayPanel display: displays)
        if(id.equals(display.id))
                currentDisplay = display;
    this.validate();        
}

我假设我需要以某种方式覆盖 repaint() 函数,但我真的不确定最好的方法。

【问题讨论】:

  • 我不是 100% 确定,但我认为您不应该每次都完全更换该面板。 (虽然我不是 100% 确定)

标签: java swing jpanel jcombobox


【解决方案1】:

这是(或多或少)我的代码:

这对我们没有帮助,因为我们不知道如何使用代码的上下文。如需获得更好的帮助,请在提问时发帖 SSCCE

当前显示 = 显示;

那行代码似乎不正确。它所做的只是改变一个变量的值。它不会将面板添加到 GUI。你的基本代码是:

panel.remove( theOldPanel );
panel.add( theNewPanel );
panel.revalidate();
panel.repaint();

但是,这正是 CardLayout 为您所做的,因此正确的解决方案是遵循 aardvarkk 的建议。

【讨论】:

    【解决方案2】:

    当您将 currentDisplay 添加到 GUI 时,您并没有将 currentDisplay 变量 添加到 GUI,而是添加 currentDisplay 变量所引用的 object。因此,稍后当您更改 currentDisplay 变量所指的组件时,这对 GUI 显示的组件绝对没有影响应该是有意义的,因为它仍然包含原始对象。

    我支持 aardvarkk 的出色建议,即您使用 CardLayout(1+ 到 aardvarkk)。如果您这样做,您会发现它会顺利运行(然后您应该接受 Aardvarkk 的回答作为 the 回答)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-13
      • 1970-01-01
      • 2017-11-10
      • 2021-05-21
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      • 2016-06-08
      相关资源
      最近更新 更多