3

我正在编写一个简单的绘画程序。我已经创建了一个JPanel,并且已经覆盖了“public void paintComponent(Graphics g)”,我还创建了相应的Listeners. 问题是每次我绘制一个新形状时,我以前的形状都会消失,有谁知道我怎样才能将以前的形状保持在原来的位置?我可以把它super.paintComponent(g)带走,但随后Jpanel's layout意志就会被扭曲。任何建议都受到高度赞赏。:) 这是我的paintComponent 方法:

public void paintComponent(Graphics g)
{
    super.paintComponent(g);


    int width = xend-xstart;
    int height = yend - ystart;
    if(width<0)
        width *= -1;
    if(height <0)
        height *= -1;
    if(color!= null && shape !=null){
    if(fill.isSelected())
    {
        g.setColor(color);
        if(shape.equals("Rectangle"))
            g.fillRect(xstart, ystart, width, height);
        if(shape.equals("Square"))
            g.fillRect(xstart, ystart, width, width);
        if(shape.equals("Circle"))
            g.fillOval(xstart,ystart,width ,width);

    }
    }

} 
4

2 回答 2

4
于 2011-12-24T05:55:50.207 回答
0

安德鲁汤普森的回答是做你想做的事的“典型”方式。但是,如果您想深入到 Swing 的深处...

super.paintComponent() 所做的一件事(最终)是 get JComponent.paintComponent(),它调用ComponentUI.update(). Javadocs 说(斜体由我添加):

“默认情况下,此方法将使用其背景颜色填充指定组件(如果其 opaque 属性为 true),然后立即调用paint。”

所以,尝试调用setOpaque(false). 但是,这通常会导致其他问题,例如当您确实想要擦除之前绘制的内容时。

于 2011-12-24T06:58:11.030 回答