重涂每次重绘的方法

时间:2014-12-30 20:09:09

标签: java applet japplet

我有一个按钮网格,我想在任意两个单击的按钮之间绘制一条线,当我按下下一组按钮时该线应该停留。为此,我在applet中制作了以下paint和init方法,并且还覆盖了更新方法,因为我们知道首先重绘调用update(Graphics g)方法。 upadate的默认实现是它首先清除背景然后调用最终完成绘图的paint方法。 因此,由于更新方法的默认实现,先前的绘图被擦除。 如果我们覆盖给定的更新方法,那么它直接调用paint(g),因此不会清除先前的绘图。

但是前一行仍然消失了。

2 个答案:

答案 0 :(得分:4)

您可以存储应该绘制的线条的数据结构,而不是试图阻止它重新绘制,每次绘制时,都要绘制相应的线条。因此,单击两个按钮会将数据添加到数据结构中,指示应该在一对按钮之间绘制一条线。

因此,在actionPerformed侦听器中,您将xy坐标存储在数据结构中,而不是设置这些实例变量。

数据结构可以是一个简单的ArrayList,包含您创建的简单Line类。 Line类只包含两组坐标:

class Line {
    private int x1;
    private int x2;
    private int y1;
    private int y2;

    public Line(x1, y1, x2, y2) {
        this.x1 = x1;
        this.x2 = x2;
        this.y1 = y1;
        this.y2 = y2;
    }
}

然后在你的paint方法中,你可以循环遍历Line对象的arraylist,并绘制每个对象。

答案 1 :(得分:0)

有两种方法可以做到这一点。为了顺利(例如覆盖paint()方法),请尝试覆盖paintComponent()而不是paint()more)。

更好的方法是使用JLayeredPane,并使用按钮在面板顶部放置透明的JPanel。图纸将在顶部窗格中完成。我认为这种方法更符合Swing理念,并且可以更好地工作(由于图像缓存等原因,图形故障减少)。