我在我的一个项目中使用了paintComponent类,我现在想知道如何从顶部减小矩形的大小使其向下。
这是代码的一部分:
public Battery(){
super();
firstTime = true;
f = new Font("Helvetica", Font.BOLD, 14);
m = Toolkit.getDefaultToolkit().getFontMetrics(f);
}
public void paintComponent(Graphics g){
if(firstTime){
firstTime = false;
batteryLevel = 1 + this.getHeight();
decr = batteryLevel / 20;
}else{
g.setColor(Color.RED);
g.fillRect(1, 0, this.getWidth(), this.getHeight());
g.setColor(Color.GREEN);
g.fillRect(1, 0, this.getWidth(), batteryLevel);
g.setColor(Color.BLACK);
g.setFont(f);
g.drawString("TEST", (getWidth() - m.stringWidth("TEST")) / 2 , this.getHeight() / 2);
}
}
public void decreaseBatteryLevel(){
batteryLevel -= decr;
this.repaint();
}
PS。对不起,如果我做错了什么,我是这个论坛的新手。
答案 0 :(得分:1)
相反
g.fillRect(1, 0, this.getWidth(), batteryLevel);
待办事项
g.fillRect(1, batteryLevel, this.getWidth(), getHeight() - batteryLevel);
也许repaint(50L)
代替repaint()
。
如果你的问题意味着:如何设置电池电量变化的动画。
使用javax.swing.Timer:
int toPaintBatteryLevel = batteryLevel;
// In the paintComponent paint upto toPaintBatteryLevel.
Timer timer = new Timer(100, new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (toPaintBatteryLevl == batteryLevel) {
return;
}
if (toPaintBatteryLevl > batteryLevel) {
--toPaintBatteryLevel; // Animate slowly
} else {
toPaintBatteryLevel = batteryLevel; // Change immediately
}
repaint(50L);
};
});
timer.start();
为了便于编码,有一个永久计时器。而外部一个改变电池级别, 并且时间决定了toPaintBatteryLevel,paintComponent用它来绘制。
答案 1 :(得分:1)
如果您希望可见电池电量下降,则需要相对于batteryLevel
的值增加Y坐标。你可以使用:
g.fillRect(1, getHeight() - batteryLevel, getWidth(), batteryLevel);