完全免责声明:我是一名 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 方法创建了一个存根,让我们了解如何使用它,但是由于模板中只有一个按钮,因此不清楚如何实现多个按钮。我尝试打开一个字符串,但很快意识到,由于字符串不是原始类型,我不能将它用于 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;
}
}