簡體   English   中英

如何在JComboBox中隱藏元素?

[英]How to hide elements with in a JComboBox?

假設我有一個JComboBox,其中包含矢量中的元素。

 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數組中的顏色colorsToHide 如果未激活該復選框,我們將其重新添加。

旁注:

在Java中,您不應為此使用向量。 向量在很大程度上被認為是過時的。 看到這篇文章: 為什么Java Vector類被認為已過時或過時?

您還應該創建所有GUI /處理EDT上的所有GUI狀態更改。 Swing不是線程安全的,盡管在大多數情況下它似乎是不需要的,但是在處理GUI之前,最好先調用SwingUtilities.invokeLaterSwingUtilities.invokeAndWait

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM