我的程序使用多個JComboBox和JButton來允許用戶顯示如何以及顯示哪些數據。直到今天我這樣做有很多這樣的:以有效的方式將幾個JComboBox,JButtons轉換爲集合<String>
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的選定項目。
我知道這些鍵的問題是我應該使用一個開關......
EDIT 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());
}
}
請您提供一個更完整的例子嗎?我在這裏看不到任何可辨別的模式。此外,格式是可怕的... –
這很危險:'someMenü_or_Button.getSelectedItem()==「showstuff」'。我知道這不是你的主要問題,但是將字符串與'=='進行比較是危險的代碼,自從'=='和'!='比較一個對象引用是否與另一個對象引用相同你不關心這件事。相反,如果兩個字符串變量保持相同的字符串表示形式,則使用「equals(...)」或「equalsIgnoreCase(...)」方法。 –
可能比使用一個ActionListener進行所有操作更好,然後嘗試使用配電盤邏輯來決定它應該做什麼,將使用匿名內部類ActionListeners,並使這些監聽器變得簡單,也許讓他們只需調用Control類的一個方法。 –