画图板的总结
一、思路
画图板实现的思路:是现有框架然后在完善功能按钮和颜色选择
框架:窗体、面板、组件。功能按钮个颜色选择以及监听器
二、框架
1.对于窗体来说,它相当于一个最大的容器,所有的东西都包含在其中。所以首先要对这个容器进行设计,那么就包括窗体的标题,大小,布局,设置可见,默认关闭。这里需要注意的是布局,窗体默认使用的使流式布局,但是后来因为涉及到整个窗体需要分区,所以就必须用边框布局。说到这里就必须要介绍面板了,即五个区域。
public void chuangti(){
this.setTitle("画图板");
this.setSize(960, 730);
this.setDefaultCloseOperation(3);
this.setLayout(null);
this.setLocationRelativeTo(null);
//设置窗体为边框布局
BorderLayout n = new BorderLayout();
this.setLayout(n);
2.总共是五个,分别是NORTH、SOUTH、WEST、EAST、CENTER,根据windows中自带的画图板来一一实现每个区域。而每个区域都是以面板为容器,所以我们也要先设计好面板的样式:大小,背景,布局管理器。其中需要注意的是大小,对于大小,只有窗体的大小可以直接jf.setsize( ).而其他的组件都必须要首先创建Dimension对象,然后用setPreferredSize()添加Dimension对象。而布局管理器根据面板上组件不同的性质来设置。其中比较特别的是SOUTH面板,它的布局是设置为NULL,因为它的组件是用setbounds来确定自己的位置。
3.因为每个区域要实现的功能不同,所以需要不同的组件。
二、功能按钮
1.左面板区域实现根据用户的需要来改变所画的图形。于是用按钮组件来体现。1在这里涉及了一个小难点:如何设置按钮的图标。解决方案:首先创建一个按钮数组,然后在创建一个按钮对象和四个图片对象,在设置图片,最后添加到面板上,这个过程中需要注意一个按钮有四种状态:静止,进入,点,选择。所以有四种图标。同时需要注意的是这里因为需要添加的图标很多,所以运用到for循环语句。2因为设置了图标,所以就不需要设置大小了。但是需要设置它的边框。 3为了后面监听器的实现,那么就必须在每个按钮上设置动作命令。 4最后要将所有形状按钮放到一个按钮组。
ButtonGroup s = new ButtonGroup();
for (int i = 0; i < 16; i++) {
JRadioButton jb = new JRadioButton();
//创建四个图片对象
ImageIcon icon1 = new ImageIcon("images/draw"+i+".jpg");
ImageIcon icon2 = new ImageIcon("images/draw"+i+"-1.jpg");
ImageIcon icon3 = new ImageIcon("images/draw"+i+"-2.jpg");
ImageIcon icon4 = new ImageIcon("images/draw"+i+"-3.jpg");
//设置图片
jb.setIcon(icon1);//设置的是默认的图片
jb.setRolloverIcon(icon2);//设置的是鼠标移动到这个按钮后的图片
jb.setPressedIcon(icon3);//设置的是鼠标按下这个按钮的图片
jb.setSelectedIcon(icon4);//设置这个按钮被选中后的图片
s.add(jb);}
2.中面板上是要实现画画的功能。所以必须要在其上添加一个画布面板。然后在画布面板上取得画布对象。
JPanel huabu = new JPanel();
//设置画布的颜色
huabu.setBackground(Color.white);
//设置画布的大小
huabu.setPreferredSize(new Dimension(600, 500));
//添加
paneldraw.add(huabu);
3.底面板是用来改变画笔的颜色,根据windows自带的画图板,将这个面板分为三个面板。一个是来呈现选中的颜色,一个是来选颜色,一个是来备注。由于这里流式管理器不好安排三个面板的位置,所以就用setbounds来设置位置。这里颜色的选择和显示都是用标签。需要设置它的大小,边框,背景颜色
//创建三个面板
JPanel panlcolorFrame = new JPanel();
JPanel panlcolorLeft = new JPanel();
JPanel panlcolorRiht = new JPanel();
//设置背景色
panlcolorFrame.setBackground(Color.gray);
panlcolorLeft.setBackground(Color.gray);
panlcolorRiht.setBackground(Color.blue);
//设置为流式布局
panelcolor.setLayout(new FlowLayout(0,5,10));
panlcolorFrame.setLayout(new FlowLayout(0,0,0));
panlcolorRiht.setLayout(new FlowLayout(0,0,0));
//设置大小
panlcolorFrame.setPreferredSize(new Dimension(180, 30));
panlcolorLeft.setPreferredSize(new Dimension(30, 30));
panlcolorRiht.setPreferredSize(new Dimension(150, 30));
//添加
panelcolor.add(panlcolorFrame);
panlcolorFrame.add(panlcolorLeft);
panlcolorFrame.add(panlcolorRiht);
//定义一个颜色数组
Color[]colors ={Color.red,Color.BLACK,Color.BLUE,Color.yellow,
Color.cyan,Color.red,Color.BLACK,Color.BLUE,Color.yellow,
Color.cyan,Color.red,Color.BLACK,Color.BLUE,Color.yellow,
Color.cyan,Color.red,Color.BLACK,Color.BLUE,Color.yellow,
Color.cyan,};
//创建一个按钮监听器对象
ColorListener action = new ColorListener(this);
//往右边内部添加按钮
for (int i = 0; i < 20; i++) {
JButton button = new JButton();
//设置大小
button.setPreferredSize(new Dimension(15, 15));
//设置按钮的颜色
button.setBackground(colors[i]);
//设置颜色按钮的边框
BevelBorder beve1 = new BevelBorder(1, Color.white, Color.gray);
button.setBorder(beve1);
panlcolorRiht.add(button);
//给按钮添加监听器
button.addActionListener(action);
}
//颜色面板左边小面板设置绝对布局
panlcolorLeft.setLayout(null);
//往面板里添加两个按钮
JButton button1 = new JButton();
JButton button2 = new JButton();
button1.setBackground(Color.black );
button2.setBackground(Color.white);
//绝对定位坐标
button1.setBounds(5, 5, 15, 15);
button2.setBounds(13, 13, 15, 15);
//设置按钮为凸出来的效果
button1.setBorder(new BevelBorder(0,Color.white,Color.gray));
button2.setBorder(new BevelBorder(0,Color.white,Color.gray));
//添加
panlcolorLeft.add(button1);
panlcolorLeft.add(button2);
三、监听
1.监听器。顾名思义,它是用来监视事情的发生和发展,并且因此而做出反应。在使用监听器之前需要先把监听器的方法给实现和编写自己需要的方法。因此涉及到子类,父类的知识。同时因为要把主界面的一些参数传递到监听器中,所以需要重载监听器的构造器。而监听器又是如何实现组件的功能的呢?
*形状组件:根据形状组选中的按钮的动作命令来判断是要画什么类型的形状。
然后就根据每个形状的特点来写程序,并且要把每次画的图形用队列保留下来。
*颜色标签:颜色就相对来说比较简单,只需要在mousePressed方法中用e.getSource和e.getButton来设置画笔的颜色。
2.队列。一种数据储存结构。它的最主要的特点是长度可变,不惟一。它是需要根据自己的需要来编写方法和属性,Java中并不自带。在画图板中主要是用来保存图形的。