在 500 毫秒内更改 JButton 颜色
Posted
技术标签:
【中文标题】在 500 毫秒内更改 JButton 颜色【英文标题】:Change JButton color in 500ms 【发布时间】:2019-02-14 19:53:26 【问题描述】:我的任务是让按钮每 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;
此代码对我不起作用,我希望有人能够提供帮助!
【问题讨论】:
【参考方案1】:这里最好的办法是使用类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);
【讨论】:
以上是关于在 500 毫秒内更改 JButton 颜色的主要内容,如果未能解决你的问题,请参考以下文章