以高效的方式将多个 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);
}
}
我的程序使用多个 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);
}
}