我的任务是使按钮在按下时每500毫秒从红色变为黑色。每次按一下按钮就可以开始和停止此操作。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Button extends JButton{
public Button() {
setBackground(Color.red);
addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
change ^= true;
while(change) {
setBackground(Color.black);
try {
Thread.sleep(500);
} catch (InterruptedException ex) {}
setBackground(Color.red);
}
}
});
}
boolean change = false;
}
该代码对我不起作用,我希望有人能够提供帮助!
最佳答案
最好的想法是使用类javax.swing.Timer
。这是我的解决方案,如何改进您的代码来做到这一点。
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.Timer;
import javax.swing.WindowConstants;
public class Button extends JButton {
public Button() {
setBackground(Color.RED);
setForeground(Color.WHITE);
addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
change ^= true;
if (change) {
timer.restart();
} else {
timer.stop();
}
}
});
}
private boolean change = false;
private Timer timer = new Timer(500, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (Color.BLACK == getBackground()) {
setBackground(Color.RED);
} else {
setBackground(Color.BLACK);
}
}
});
public static void main(String[] args) {
Button b = new Button();
b.setText("Press me");
JFrame frm = new JFrame("Test button");
frm.add(b);
frm.pack();
frm.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frm.setLocationRelativeTo(null);
frm.setVisible(true);
}
}
关于java - 在500毫秒内更改JButton颜色,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56470540/