日期:2014-05-20  浏览次数:20658 次

求教paint(),repaint(),update() 的问题--如何设计一个画画板???
最近接触到Swing,想做一个画板,画版上有3个按钮,一个可以设置笔的粗细,一个可以获取颜色,一个点了以后使用橡皮....
第一次用最简单的想法,就是用JFrame做为画板,然后把三个按钮安置上去,这样确实成功了,但是只要用paint方法,第一次进入肯定看不到三个按钮,要把鼠标挪上去才出来,画出的图,会被按钮事件叫出的窗口给擦去,三个BUTTON也会被擦去
问了一下别人,说是JFrame的paint方法的问题.好,于是我把整个东西搬到一个JPanel上面,然后把JPanel放到JFrame里,结果还是差不多,而且更糟糕,每次使用按钮事件再绘画,按钮的图标就会重叠(也就是说又多出来三个按钮);

下面有我第二次,也就是用JPanel的代码,麻烦高手们给我指点指点,在这里先谢谢各位了.


另外就是,我对paint,repaint,update方法非常陌生,只能搬着用,有高手能给讲解一下吗?还有那个Graphics也是,搞不懂


============================

*这是用来安装JPanel的Frame*/

import   javax.swing.JFrame;
import   java.awt.Container;
import   java.awt.Toolkit;

public   class   CreateDrawPane   extends   JFrame
{
DrawPane   pane;

public   CreateDrawPane()
{
Container   conPane   =   this.getContentPane();
pane   =   new   DrawPane();

this.setTitle( "画板1.01 ");
this.setSize(500,500);
this.setLocation((Toolkit.getDefaultToolkit().getScreenSize().width-
    getSize().width)/2,
  (Toolkit.getDefaultToolkit().getScreenSize().height-
    getSize().height)/2);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
conPane.setLayout(null);
conPane.add(pane);
this.setVisible(true);
}

public   static   void   main(String[]   args)
{
CreateDrawPane   drawpane   =   new   CreateDrawPane();
}
}

/*这是用来画图的JPanel*/    


import   javax.swing.JPanel;
  import   javax.swing.JButton;
  import   javax.swing.JColorChooser;
  import   javax.swing.JOptionPane;
  import   java.awt.event.ActionEvent;
  import   java.awt.event.ActionListener;
  import   java.awt.event.MouseMotionAdapter;
  import   java.awt.event.MouseAdapter;
  import   java.awt.event.MouseEvent;
  import   java.awt.event.InputEvent;
  import   java.awt.Color;
  import   java.awt.Graphics;
 
  public   class   DrawPane   extends   JPanel   implements   ActionListener
  {
  Color   exchangeColor   =   Color.black;
  private   int   x   =   -1;
  private   int   y   =   -1;
  private   int   penH   =   2;
  private   boolean   clearFlag   =   false;
 
  JButton   clearBtn;
  JButton   penBtn;
  JButton   colorBtn;
 
  Graphics   externG;
 
  public   DrawPane()
  {
this.setLayout(null);
  this.setBackground(Color.white);
  this.setSize(500,500);
     
  clearBtn   =   new   JButton( "橡皮 ");
  penBtn   =   new   JButton( "粗细 ");
  colorBtn   =   new   JButton( "颜色调整 ");
  clearBtn.setBounds(2,2,60,20);
  clearBtn.setVisible(true);
  penBtn.setBounds(63,2,60,20);
  penBtn.setVisible(true);
  colorBtn.setBounds(126,2,60,20);
          colorBtn.setVisible(true);
  clearBtn.addActionListener(this);
  penBtn.addActionListener(this);
  colorBtn.addActionListener(this);
  this.add(clearBtn);