在我的java绘图应用程序中,当我在mouselisteners中调用它时,paintComponent重写了两次

时间:2015-12-15 21:51:49

标签: java swing bufferedimage paintcomponent

使用此代码我试图首先创建一个bufferedimage作为我的画布,我将绘制一些东西,然后我想将每个图像保存到一个链表。但是,当我使用我的工具绘制一些东西时,这个方法重写了两次。此外,我完全不理解这种覆盖背后的逻辑。

`

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

    if (image != null) {
        g2d = image.createGraphics();

        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

        setBackground(backgroundColor);        
        list.add(image);           
        list.remove(list.size()-1);        
        g.drawImage(list.get(list.size()-1), 0, 0, this);
        g2d.dispose();

     // a();
    } else{
        image = new BufferedImage(1920,1080,BufferedImage.TYPE_INT_ARGB);
        System.out.println("XXXXXXX");
        list.add(image);
        g.drawImage(list.get(0), 0, 0, null);
        list.remove(0);
    }


  }
public void addLabel(JLabel label){
    add(label);
    repaint();
}

public void setBackgroundColor(Color color){
    backgroundColor=color;
    repaint();
}

public void undo(){

}

 public void clear(){

     image = new BufferedImage(1920, 1080, BufferedImage.TYPE_INT_ARGB);
     g2d = image.createGraphics();
     g2d.setPaint(backgroundColor);

     list.remove(list);
     list.add(image);

     g2d.drawImage(image,0,0,null);

     g2d.setPaint(backgroundColor);

     repaint();
 }

 public void clearLast(){
     if(!list.isEmpty()){           
         g2d = image.createGraphics();           
         g2d.drawImage(list.get(list.size()-1), 0, 0, null);                        
         repaint();
     }

 }`

0 个答案:

没有答案