gpt4 book ai didi

java - 如何隐藏 JComboBox 中的元素?

转载 作者:行者123 更新时间:2023-12-02 04:32:45 24 4
gpt4 key购买 nike

假设我有一个 JComboBox,其中包含 vector 中的元素...

 public class Shade(){
//code for creating panels etc and other components/containers
JCheckBox primary = new JCheckBox("Primary", false);
Vector<String> colours = new Vector<String>();
}
public Shade(){
//setTitle, look&feel, defaultCloseOperation, Layouts etc etc...

colours.add(0, "Purple);
colours.add(1, "Red");
colours.add(2, "Blue");
colours.add(3, "Magenta");

JComboBox<String> colourSelector = new JComboBox<String>(colours);

}

如果选择了主 JCheckBox,我想从 JComboBox 中“隐藏”紫色和磁铁色,一旦取消选择主 JCheckBox,我想显示隐藏的元素,以便原始列表相关。

我尝试这样做...

   public class eventHandler implements itemListener(){

Shade refObj;
public eventHandler(Shade rinseFM){
refObj = rinseFM;
}

#Overriding abstract implemented method...
public void itemStateChanged(ItemEvent event){

if(refObj.primary.isSelected() == true){
refObj.colours.hide(// index of colours required to hide))
}
}
}

hide 方法实际上并不存在,是否有类似的方法。

最佳答案

试试这个:

private JFrame frame = new JFrame("JComboExample");
private JCheckBox primary = new JCheckBox("Primary");
private JComboBox<String> colorSelector;

private String[] colorsToHide = { "Purple", "Magenta" };

public JComboExample() {
SwingUtilities.invokeLater(() -> {
setupFrame();
setupCheckbox();
initJComboBox("Purple", "Red", "Blue", "Magenta");
frame.add(primary, BorderLayout.NORTH);
frame.add(colorSelector, BorderLayout.CENTER);
});
}

private void setupFrame() {
frame.setSize(300, 100);
frame.setLocationByPlatform(true);
frame.setDefaultCloseOperation(3);
frame.setLayout(new BorderLayout());
}

private void setupCheckbox() {
primary.addActionListener(event -> {
if(primary.isSelected()) {
for(String color: colorsToHide) {
colorSelector.removeItem(color);
}

} else {
for(String color: colorsToHide) {
colorSelector.addItem(color);
}
}
});
}

private void initJComboBox(String... colors) {
colorSelector = new JComboBox<String>(colors);
}

public void setVisbility(boolean visibility) {
frame.setVisible(visibility);
}

public static void main(String[] args) {
JComboExample example = new JComboExample();
example.setVisbility(true);
}

当单击复选框时,此类实现回调(添加 ActionListener)。在回调中,当激活复选框时,我们只需删除数组 colorsToHide 中的颜色即可。如果该复选框未激活,我们会将它们添加回来。

旁注:

在 Java 中,您不应将 vector 用于此目的。 vector 在很大程度上被认为是过时的。参见这篇文章:Why is Java Vector class considered obsolete or deprecated?

您还应该在 EDT 上创建所有 GUI/处理所有 GUI 状态更改。 Swing 不是线程安全的,尽管在大多数情况下可能不需要它,但在处理 GUI 之前调用 SwingUtilities.invokeLaterSwingUtilities.invokeAndWait 是一个很好的做法。

关于java - 如何隐藏 JComboBox 中的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31234826/

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