完全な免責事項: 私は CS の学生です。この質問は、オブジェクト指向プログラミング用に最近割り当てられた Java プログラムに関連しています。コンソール関連の作業はいくつか行いましたが、GUI と Swing または Awt を使用したのはこれが初めてです。テキストを表示するウィンドウを作成するコードと、テキストをさまざまな色で回転させるボタンを作成するコードが与えられました。次に、代わりに色のラジオ ボタンを作成するようにプログラムを変更するように依頼されました。これは、API を調査する練習を行うことも目的としていました。私はすでに課題を提出しており、講師からコードをここに投稿する許可を得ています。
Javaでボタンアクションを実装する最良の方法は何ですか? いろいろいじった後、次のようなボタンを作成しました。
class HelloComponent3 extends JComponent
implements MouseMotionListener, ActionListener
{
int messageX = 75, messageY= 175;
String theMessage;
String redString = "red", blueString = "blue", greenString = "green";
String magentaString = "magenta", blackString = "black", resetString = "reset";
JButton resetButton;
JRadioButton redButton, blueButton, greenButton, magentaButton, blackButton;
ButtonGroup colorButtons;
public HelloComponent3(String message) {
theMessage = message;
//intialize the reset button
resetButton = new JButton("Reset");
resetButton.setActionCommand(resetString);
resetButton.addActionListener(this);
//intialize our radio buttons with actions and labels
redButton = new JRadioButton("Red");
redButton.setActionCommand(redString);
...
そして、アクションリスナーを追加しました...
redButton.addActionListener(this);
blueButton.addActionListener(this);
...
actionPerformed メソッドのスタブは、使用方法を示すために既に作成されていますが、テンプレートにはボタンが 1 つしかないため、複数のボタンを実装する方法が明確ではありませんでした。String をオンにしてみましたが、String はプリミティブ型ではないため、switch ステートメントには使用できないことにすぐに気付きました。if-else チェーンを即興で作成することもできましたが、代わりに思いついたのがこれです。エレガントとはほど遠いように思えますが、もっと良い方法があるはずです。あるとすれば、それは何ですか?文字列をオンにする方法はありますか? それとも、よりスケーラブルな方法でアクションを選択しますか?
public void actionPerformed(ActionEvent e){
if (e.getActionCommand().equals(resetString)) {
messageX = 75; messageY = 175;
setForeground(Color.black);
blackButton.setSelected(true);
repaint();
return;
}
if ( e.getActionCommand().equals(redString) ) {
setForeground(Color.red);
repaint();
return;
}
if ( e.getActionCommand().equals(blueString) ) {
setForeground(Color.blue);
repaint();
return;
}
if ( e.getActionCommand().equals(greenString) ) {
setForeground(Color.green);
repaint();
return;
}
if ( e.getActionCommand().equals(magentaString) ) {
setForeground(Color.magenta);
repaint();
return;
}
if ( e.getActionCommand().equals(blackString) ) {
setForeground(Color.black);
repaint();
return;
}
}