计时器每次打勾后 填充矩形(Color.ORANGE)直到整个矩形着色,然后运行矩形 又空了。 “停止”按钮将停止绘画。但是当代码联系起来慢慢使矩形变成白色时,矩形就会变成白色。
如何在橙色矩形上绘画?
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MyFrame extends JFrame implements ActionListener
{
private JPanel beerPannel;
private JButton startBtn;
private JButton stopBtn;
private Timer beerTimer;
private int timeCountUp = 0;
private int timeCountDown = 22;
public MyFrame() {
setLayout(new FlowLayout());
// create textPlane
beerPannel = new JPanel();
beerPannel.setPreferredSize(new Dimension(250, 300));
beerPannel.setBackground(Color.WHITE);
// create startBtn
startBtn = new JButton("Start");
startBtn.addActionListener(this);
// create stopBtn
stopBtn = new JButton("Stop");
stopBtn.addActionListener(this);
// make timer
beerTimer = new Timer(1000, this);
// add to the screen
add(beerPannel); add(startBtn); add(stopBtn);
// config pop-up window
setSize(300, 380);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent event) {
// start with a empty glass of beer
Graphics beerGlass = beerPannel.getGraphics(); // set beerGlass ass writePanel
// x -> y -> width -> height
beerGlass.drawRect(50, 50, 150, 220);
// onClick startBtn
if(event.getSource() == startBtn) {
// start Timer
beerTimer.start();
}
// onClick stopBtn
if(event.getSource() == stopBtn) {
// stop Timer
beerTimer.stop();
}
// als beer timer is gestart
if(event.getSource() == beerTimer) {
// count timeClicks
int telUp = timeCountUp++;
// standardt vars
int width = 148;
int x = 51;
// start with a empty glass of beer
// set color
Graphics fillBeerGlass = beerPannel.getGraphics();
if(telUp <= 22) {
// set height
int height = 10 * telUp - 2;
// set y
int y = 259 - height + 10;
fillBeerGlass.setColor(Color.ORANGE);
fillBeerGlass.drawRect(x, y, width, height);
fillBeerGlass.fillRect(x, y, width, height);
} else {
// count timeClicks
int telDown = timeCountDown--;
// verklein inhoud
// set height
int height = 10 * telDown - 2;
// set y
int y = 259 - height + 10;
// set color
fillBeerGlass.setColor(Color.WHITE);
fillBeerGlass.drawRect(x, y, width, height);
fillBeerGlass.fillRect(x, y, width, height);
// if count 0, stop timer
if(telDown == 0) {
beerTimer.stop();
}
}
}
}
}
答案 0 :(得分:1)
正如mKorbel在评论中提到的,这不是尝试在Swing中绘画的正确方法。相反,您需要创建一个具有状态并完全重新绘制自己的组件。然后有Timer
改变状态(例如可能从50%满到55%)并强制重绘。计时器可以使用相同的方法上下移动状态。