<!--[if !supportLists]-->一. <!--[endif]-->实现画图板更好的布局
以往我们用的是Flowlayout流式布局,现在要用BorderLayout,这个没什么技术含量,需要注意的是以下几点:
左(右)边的高度=窗体高度-(下边组件的高度+上边组件高度);
这句话的意思是不论你怎么定义它的高度,即使定义为0抑或更极端的直接取窗体高度。它都不会实现,只会按照那个定义式取值。
下(上)边的宽度=窗体的宽度;
中间部分的高度和宽度不用定义他的高和宽取的是四周取过后剩下的部分。
我们现在来实现它:
仿XP画图板的模式,我们把整个板块分成三部分(左中下),分别放图形选择、画图区、颜色选择,为此我们要做三件事:
第一件事是先创建布局管理器BorderLayout,并添加到窗体上;
// 创建流式布局管理器
java.awt.BorderLayout border = new java.awt.BorderLayout();
// 给窗体添加布局管理器
this.setLayout(border);
第二件事是创建三个面板,并将面板添加到窗体上;
//画布面板
JPanel jp_draw = new JPanel();
jp_draw.setBackground(Color.white);
//图形选择面板
JPanel jp_select = new JPanel();
jp_select.setPreferredSize(new Dimension(80,0));
jp_select.setBackground(Color.DARK_GRAY);
//颜色选择面板
JPanel jp_color = new JPanel();
jp_color.setPreferredSize(new Dimension(0,80));
jp_color.setBackground(Color.LIGHT_GRAY);
//将面板加在窗体上
this.add(jp_draw,BorderLayout.CENTER);
this.add(jp_select,BorderLayout.WEST);
this.add(jp_color,BorderLayout.SOUTH);
第三件事是将组建加在面板上
<!--[if gte vml 1]><v:shapetype id="_x0000_t202" coordsize="21600,21600" o:spt="202" path="m,l,21600r21600,l21600,xe"> <v:stroke joinstyle="miter" /> <v:path gradientshapeok="t" o:connecttype="rect" /> </v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t202" style='position:absolute; left:0;text-align:left;margin-left:282.5pt;margin-top:9.15pt;width:169.75pt; height:109.5pt;text-indent:0;z-index:251660288;mso-width-relative:margin; mso-height-relative:margin'> <v:textbox style='mso-next-textbox:#_x0000_s1026' /> </v:shape><![endif]--><!--[if !vml]-->
<!--[endif]--><!--[if !mso]-->
|
jp_select.add(radio2);
jp_select.add(radio3);
jp_select.add(radio4);
<!--[if !supportLists]-->二. <!--[endif]-->添加选定颜色功能
这是一快比较有意思的部分,有以下几种方法。在开始前我们先把准备工作完成。
准备工作:创建一个“选择颜色”按钮,加在相应的面板上。
准备工作完成后,我们要实现的功能是我点击这个颜色选择按钮可以选择以后将要画图形的颜色。
为了实现这个功能,我们需要给这个JButton加一个Actionlistener。好我们现在来具体具体实现。
实现这个的第一种方法创建内部类加在画图板这个类中,在画图板的属性部分加一个Color类型的color,并定义初值。创建一个内部类继承Actionlistener并实现方法具体代码是:
class ColorListen implements ActionListener{
public void actionPerformed(ActionEvent e) {
color = javax.swing.JColorChooser.showDialog(null, "颜色选择", Color.black);
}
接下来我们需要把刚才内部类取出的“color” g.setColor(board.color);添加到图形上。随着这步的完成,这个功能基本就O了。
实现这个功能的方法二,创建一个类来继承Actionlistener方法同上只不过这个类不是内部类,现在就是三个类了我们可以把Color的对象传到 MouseListener中,在Color中定义一个方法
public Color getColor(){
return color;
}、
然后把C_lis传到MouseListener,再用C_lis调用方法。