非常に統一された方法でチェックを処理する場合は、イベントをより簡単に処理するのに役立つ何らかの構造 (おそらくデータ ソースまたは何らかの処理オブジェクト) にそれらをマッピングして、JChekBox
es をに配置すると役立つ場合があります。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
}
});
リスナーにコードが追加されたらすぐに、それをメイン クラスのメソッドに移動する必要があります。