如果您以統一的方式處理檢查,可能會幫助將JChekBox
置入HashMap
,將它們映射到某些可幫助處理事件的結構(可能是數據源或某個處理對象)。通過創建,添加和註冊複選框的方法可以進一步減少代碼量。總的想法是沿線
HashMap<JCheckBox, String> urls = new HashMap<JCheckBox, String>();
// Here I use String but can be any complex data structure.
ActionListener listener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
String url = urls.get(e.getSource());
// Work with the selected URL now
}
};
void buildCheckBoxes() {
register("http://wikipedia.org");
register("http://stackoverflow.com");
// and 101 others, or load the list from the file.
}
void register(String url) {
JCheckBox box = new JCheckBox("Use "+url);
urls.put(box, url);
box.addActionListener(listener);
// One listener for all, defined above
myPanel.add(box);
// Some panel probably with GridLayout
}
從另一個方面,如果你的行爲有很大的不同,這也可能是更好的有一個單獨的偵聽器(可能是內部或匿名類),爲每個不同的動作:
JCheckBox boxA = new JCheckBox("A");
JCheckBox boxB = new JCheckBox("B");
boxA.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Only code for boxA
}
});
boxB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Only code for boxB
}
});
只要監聽器中有更多的代碼,就應該將它移動到主類的方法中。
來源
2013-01-15 07:56:10
h22
我得到輸出爲「null」。 –
@RohanKandwal忘了將setName設置爲複選框。 checkBox1.setName( 「檢查1」);現在更新。或者你可以使用'check.getText()' – vels4j
checkBox1.setName(「Check1」);做了訣竅,但是有可能獲得複選框對象,如「checkBox1」作爲輸出? –