gpt4 book ai didi

java - 打开字符串/执行按钮操作

转载 作者:行者123 更新时间:2023-12-01 06:00:31 25 4
gpt4 key购买 nike

完全免责声明:我是一名计算机科学学生,这个问题与最近分配的面向对象编程的 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);
...

并添加了 Action 监听器...

redButton.addActionListener(this);
blueButton.addActionListener(this);
...

已经为 actionPerformed 方法创建了一个 stub ,让我们了解如何使用它,但由于模板中只有一个按钮,因此不清楚如何实现多个按钮。我尝试切换字符串,但很快意识到,由于字符串不是原始类型,因此我无法将它用于 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;
}
}

最佳答案

不要这样写:

resetButton.addActionListener(this);

你也可以这样写:

resetButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
resetButtonActionPerformed(evt);
}
});

您可以(然后必须)编写以下内容,而不是为所有操作编写一个大的actionPerformed():

public void resetButtonActionPerformed(ActionEvent evt) {
messageX = 75; messageY = 175;
setForeground(Color.black);
blackButton.setSelected(true);
repaint();
}

我不知道这是否是最优雅的解决方案,但至少你不再有那么大的 if 构造。

关于java - 打开字符串/执行按钮操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/184216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com