具体如下:
package Simple_Draw;
public class Draw {
public static void main(String[] args) {
DrawPanel dp = new DrawPanel();
dp.initJFrame();
}
}
package Simple_Draw;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.util.ArrayList;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.border.BevelBorder;
public class DrawPanel extends JFrame{
public Graphics g;
private ButtonGroup bg;
public ArrayList<Shape> al = new ArrayList<Shape>();
public void initJFrame(){
this.setTitle("画板");
this.setSize(600, 500);
this.setDefaultCloseOperation(3);
this.setLocationRelativeTo(null);
this.Panelleft();
this.Panelbotton();
JPanel panelmiddle = this.Panelmiddle();
this.Menu();
this.setVisible(true);
g = panelmiddle.getGraphics();
PanelMiddleListener pml = new PanelMiddleListener(bg,g,al);
panelmiddle.addMouseListener(pml);
panelmiddle.addMouseMotionListener(pml);
<span style="white-space:pre"> </span>}
}
如上具体思路就是首先主函数入口,为了不让主函数显得复杂化,创建了DrawPanel类的对象,然后调用initJFrame这个方法,由于这个类继承了JFrame窗体类,所以就可以设置窗体布局,总分为三个面板,分为三个方法写,然后再在initJFrame调用三个面板,具体,请结合看:
public void Panelleft(){
JPanel panelleft = new JPanel();
panelleft.setPreferredSize(new Dimension(78,0));
panelleft.setBackground(new Color(240,240,240));
this.add(panelleft,BorderLayout.WEST);
panelleft.setLayout(new FlowLayout(FlowLayout.LEFT,0,0));
String [] command ={"wujiao","xuxian","xiangcha","oil","getcolor","biggle","pencil","brush","pentong","font","line","quxian","rect","duobian","oval","ovalrect"};
bg = new ButtonGroup();
for(int i=0;i<command.length;i++){
JRadioButton jrb = new JRadioButton();
if(i==0){
jrb.setSelected(true);
}
jrb.setIcon(new ImageIcon("images/draw"+i+".jpg"));
jrb.setRolloverIcon(new ImageIcon("images/draw"+i+"-1.jpg"));
jrb.setPressedIcon(new ImageIcon("images/draw"+i+"-2.jpg"));
jrb.setSelectedIcon(new ImageIcon("images/draw"+i+"-3.jpg"));
jrb.setActionCommand(command[i]);
panelleft.add(jrb);
bg.add(jrb);
}
}
public JPanel Panelmiddle(){
JPanel panelmiddle = new JPanel();
panelmiddle.setBackground(Color.white);
this.add(panelmiddle);
return panelmiddle;
}
public void Panelbotton(){
JPanel panelbotton = new JPanel();
panelbotton.setPreferredSize(new Dimension(0,80));
panelbotton.setBackground(new Color(240,240,240));
this.add(panelbotton,BorderLayout.SOUTH);
panelbotton.setLayout(new FlowLayout(FlowLayout.LEFT,0,0));
JPanel panelInner = new JPanel();
panelInner.setLayout(new FlowLayout(FlowLayout.LEFT,0,0));
panelInner.setPreferredSize(new Dimension(300,50));
panelbotton.add(panelInner,FlowLayout.LEFT);
JPanel panelInnerleft = new JPanel();
JPanel panelInnerright = new JPanel();
panelInnerleft.setBackground(Color.black);
panelInnerright.setBackground(Color.red);
panelInnerleft.setPreferredSize(new Dimension(50,50));
panelInnerright.setPreferredSize(new Dimension(250,50));
panelInnerright.setLayout(new FlowLayout(FlowLayout.LEFT,0,0));
panelInner.add(panelInnerleft);
panelInner.add(panelInnerright);
Color [] color={Color.black,Color.yellow,Color.green,Color.red,Color.blue,Color.darkGray,Color.orange,Color.pink,Color.cyan,Color.lightGray,Color.black,Color.yellow,Color.green,Color.red,Color.blue,Color.darkGray,Color.orange,Color.pink,Color.cyan,Color.lightGray};
ButtonListener bl = new ButtonListener(this);
for(int i=0;i<color.length;i++){
JButton jb = new JButton();
jb.setPreferredSize(new Dimension(25,25));
jb.setBackground(color[i]);
panelInnerright.add(jb);
jb.addActionListener(bl);
}
panelInnerleft.setLayout(null);
JButton jb1 = new JButton();
JButton jb2 = new JButton();
jb1.setBounds(9,9,25,25);
jb2.setBounds(19,19,25,25);
jb1.setEnabled(false);
jb2.setEnabled(false);
jb1.setBorder(new BevelBorder(0,Color.red,Color.gray));
jb2.setBorder(new BevelBorder(0,Color.white,Color.gray));
panelInnerleft.add(jb1);
panelInnerleft.add(jb2);
}
三个方法分别是左中下面板,左边面板设置了按钮,在按钮上添加了图片,上面代码就是下面板设置了按钮颜色以及对其方式,要在中间面板画出想要的图形,就需要在中间面板上得到画笔,然后还需要鼠标监听器才能画出,这需要创建一个新的类,然后重写这个类,把需要的属性传递过去,以上就是画板基本界面了;
接下来就监听器的设置,还有重绘,不做概述了;