以高效的方式将多个 JComboBoxes、JButtons 转换为 Set<String>

Convert several JComboBoxes, JButtons to a Set<String> in an efficient way

我的程序使用多个 JComboBoxes 和 JButtons 来允许用户显示数据的方式和内容。直到今天,我用其中的许多方法做到了这一点:

if (e.getSource() == someMenü_or_Button){
        if(someMenü_or_Button.getSelectedItem()=="showstuff")display.oneOfManySetter(0);            
}

现在我想我可以把所有的选项收集在一个 Set<String> Attributes = new HashSet<String>();

但我的结果并不是代码效率更高,性能也更好,因为我这样做了:

public void actionPerformed(ActionEvent e) { 
attributes.clear();

if(someMenü1.getSelectedItem()== "sum"); 
else attributes.add(someMenü.getSelectedItem());
//and so on.

attributes.add(someButton1.getName());
//and so on 

//And in addition:
if (e.getSource() == someButton1){
        if(someButton1.getText()=="option1")original.setText("option2");
        else someButton1.setText("option1");
 }

所以我的问题是我能否以某种方式将 JComboBox 转换为集合并(我知道这是可能的)将其从集合中删除?然后我会再次添加 JComboBox 的选定项目。

我知道这些按钮的问题是我应该使用开关...

编辑16:12

为了使这个代码示例更具体一些,说明我想做什么:

//somewhere
private Set<String> attributes = new HashSet<String>();
JComboBox<String> menu;
String[] values = {"option1","option2","option3","option4"};
panel.add (menu = new JComboBox<>(values),gbc);
menu.addActionListener(this);    

public void actionPerformed(ActionEvent e) {

     if(e.getSource() == menu){
           attributes.removeAll(menu.getCollection());     //HOW??????
           attributes.add(menu.getSelectedItem());
     }
}

我不确定你为什么要转换菜单。您已经在 values 数组中拥有键。我理解错了吗?这个小例子在做你想做的事吗?

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

import javax.swing.JComboBox;
import javax.swing.JFrame;

public class SomeClass extends JFrame implements ActionListener {

    private Set<String> attributes = new HashSet<>();
    private String[] values = { "a", "b", "c", "d" };
    private JComboBox<String> menu = new JComboBox<>(values);

    public SomeClass() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        init();
        pack();
        setVisible(true);
    }

    public static void main(String[] args) {
        new SomeClass();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // attributes.add();
        if (e.getSource() instanceof JComboBox<?>) {
            JComboBox<?> menu = (JComboBox<?>) e.getSource();
            String s = (String) menu.getSelectedItem();
            attributes.removeAll(Arrays.asList(values));
            attributes.add(s);
            System.out.println(s);
            System.out.println(attributes);
        }
    }

    private void init() {
        menu.addActionListener(this);
        add(menu);
    }

}