从顶部减小填充矩形的高度

时间:2012-12-16 12:59:04

标签: java swing size jcomponent

我在我的一个项目中使用了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。对不起,如果我做错了什么,我是这个论坛的新手。

2 个答案:

答案 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);