//In the last version I have finish the function to write a line ... //This version 0.2 will add more fun things... import java.awt.*; import javax.swing.*; import java.awt.event.*; public class DrawPad extends Frame { IDrawPad idp; JButton b1; JButton b2; JPanel jpl; public void init() { idp=new IDrawPad(this); jpl=new JPanel(new GridLayout(1,2,10,10)); b1=new JButton("Black"); b2=new JButton("Other"); //add(idp); add(idp,BorderLayout.CENTER); add(jpl,BorderLayout.NORTH); jpl.add(b1); jpl.add(b2); b1.addActionListener(idp); idp.init(); idp.setBackground(Color.magenta); this.setBackground(Color.white); this.setVisible(true); addWindowListener(new WindowAdapter(){ @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); } public static void main(String args[]) { new DrawPad().init(); } } class IDrawPad extends JPanel implements ActionListener{ DrawPad dp; IDrawPad(DrawPad dp) { this.dp=dp; } Color c=new Color(0, 150, 150); Point Frond=new Point(0,0); Point Back=new Point(0,0); Image tem; int i=1; boolean s_s; @SuppressWarnings("deprecation") public void actionPerformed(ActionEvent e) { if(i%4==3) { dp.b1.setLabel("CYAN"); c=Color.cyan; dp.b1.setBackground(c); i++; //System.out.println(i); } else if(i%4==2){ dp.b1.setLabel("Black"); c=Color.black; dp.b1.setBackground(c); i++; //System.out.println(i); } else if(i%4==1) { dp.b1.setLabel("RED"); c=Color.red; dp.b1.setBackground(c); i++; //System.out.println(i); } else if(i%4==0) { dp.b1.setLabel("BLUE"); c=Color.blue; dp.b1.setBackground(c); i++; //System.out.println(i); } } public void init() { setBounds(100,100,700,550); setBackground(Color.orange); setVisible(true); this.addMouseMotionListener(new MouseE()); this.addMouseListener(new MouseE()); } public void update(Graphics g) { if(tem==null) { tem=this.createImage(700, 550); } Graphics tg=tem.getGraphics(); paint(tg); g.drawImage(tem, 0, 0, null); } public void paint(Graphics g) { g.setColor(c); g.drawLine(Back.x, Back.y, Frond.x, Frond.y); Back=Frond; } } class MouseE extends MouseMotionAdapter implements MouseListener { IDrawPad y; @Override public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mousePressed(MouseEvent e) { y=(IDrawPad)e.getSource(); //System.out.println(y.Back); y.Back=e.getPoint(); } @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub } public void mouseDragged(MouseEvent e) { y=(IDrawPad)e.getSource(); y.Frond=e.getPoint(); y.repaint(); } }
1.在最初,我直接在DrawPad上面作画,然后不断的update()这个画面....这样这个画面其实都是一个画板.但是实际中,我们只需要在一个画板区域作画...其他地方放置一个按键等功能...
2.所以我们需要在主窗口中添加一个可以画画的组件.也就是拥有paint()方法的一个组件...我们发现JPanel中有这个方法....所以我们新建一个IDrawPad从JPanel中继承...