gpt4 book ai didi

java - 在 swing 中使用 boolean 变量而不是 ActionListner 接口(interface)

转载 作者:行者123 更新时间:2023-11-29 05:17:04 25 4
gpt4 key购买 nike

我有一个小问题,请让我解释一下这个场景。我有一个 swing jframe,其中我有一个名为“开始”的按钮,它以秒为单位启动计时器,所以每当我点击开始时,它会将按钮本身转换为“重置”,这应该使秒数为零,并且应该再次将其自身转换为“开始”。我担心的是,对于这两种情况,我必须运行两组代码,为此我使用了两个实现 ActionListener 接口(interface)的类,有没有办法将这两组代码包含在实现 ActionListener 的同一个类中,并切换代码块取决于一个 boolean 变量,它随着按钮的变化而改变它的值。

我试过了,但我遇到了性能问题,例如卡住应用程序,甚至无法完全按预期工作。

请查看下面我的代码。

 public class SuperTimer extends JFrame
{
JButton start;
private final StartCountDown countdown;
public SuperTimer()
{
countdown= new StartCountDown();
start.addActionListener(countdown);
}
public class StartCountDown implements ActionListener
{
public void actionPerformed(ActionEvent l)
{
if(l.getSource()==start)
{
count = Long.parseLong(input.getText());
start.setText("Reset");
reset = new Reset();
start.removeActionListener(countdown);
start.addActionListener(reset);
invalid.setVisible(false);
}
TimeClass tc = new TimeClass(count);
timer = new Timer(1000,tc);
timer.start();
}
}
public class Reset implements ActionListener
{
public void actionPerformed(ActionEvent j)
{
start.setText("Start");
time.setText("00:00:00");
input.setText("");
timer.stop();
timeup.setVisible(false);
start.removeActionListener(reset);
start.addActionListener(countdown);
}
}
}**

最佳答案

只使用一个 ActionListener 或者更好的 AbstractAction,给它一个 boolean 变量,然后让它根据 boolean 变量改变它的状态。

例如,

import java.awt.event.ActionEvent;
import javax.swing.*;

public class ActionWithMultipleBehaviors extends JPanel {
private TimerButtonAction timerBtnAction = new TimerButtonAction("Start", "Reset");
private JButton timerButton = new JButton(timerBtnAction);

public ActionWithMultipleBehaviors() {
add(timerButton);
}

class TimerButtonAction extends AbstractAction {
private boolean stateStart = true;
private String name;
private String secondName;

public TimerButtonAction(String name, String secondName) {
super(name);
this.name = name;
this.secondName = secondName;
}

@Override
public void actionPerformed(ActionEvent e) {
String newName;
if (stateStart) {
newName = secondName;

// TODO: add start timer code

} else {
newName = name;

// TODO: add reset timer code

}
putValue(NAME, newName);
stateStart = !stateStart;
}
}

private static void createAndShowGui() {
ActionWithMultipleBehaviors mainPanel = new ActionWithMultipleBehaviors();

JFrame frame = new JFrame("ActionWithMultipleBehaviors");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}

关于java - 在 swing 中使用 boolean 变量而不是 ActionListner 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26170990/

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