首先,类MenuUp继承了MenuBar类的性质,所谓的MenuBar就是类库中已经创建好的可供继承和使用的类,它的默认放置是在面板中的最上端,可以为它添加菜单项,这个可以由用户自行编写,如上,我们创建了两个菜单目录项,即File和Help,注意,由于Help是一个特殊的菜单,一般放置在菜单栏的最末位,所以添加的时候也需要注意,要添加一条setHelpMenu()的语句。程序中的“对象.add()”表示在对象中添置一些其它的对象,“对象.addSeparator()”是指添加分隔符的意思。
创建好这个类后,在Drawing(String ss)中要添加一条setMenuBar( new MenuUp() ),大家注意,虽然Frame默认的是边界布局管理器,但是由于MenuBar始终是在最上端的,所以,即使当添加了add(**, BorderLayout.NORTH)后,这个部件也是位于MenuBar之下的。
现在运行程序就会有菜单的图象出现,当然,由于没有编写功能,所以菜单内容还不可选,这我们会到后面介绍。
前面提到,MenuDown类要通过使用一个Panel类来实现,那么我们不如直接将MenuDown继承Panel类,让它直接具有Panel的功能(也就是说,现在的MenuDown的布局管理器为FlowLayout,在其中添加Choice和Checkbox,它们将顺序摆放):
class MenuDown extends Panel
{
public MenuDown()
{
Choice ce = new Choice();//创建一个Choice对象
ce.addItem( "Rectangle" );
ce.addItem( "Ellipse" ); //定义Choice中的选项
add( ce ); //添加Choice对象
CheckboxGroup cbg = new CheckboxGroup();//创建一个单选框的框架
Checkbox cb1 = new Checkbox( "Red", cbg, false );
Checkbox cb2 = new Checkbox( "Green", cbg, false );
Checkbox cb3 = new Checkbox( "Blue", cbg, false );
Checkbox cb4 = new Checkbox( "Black", cbg, true); //创建4个单选框
add( cb1 );
add( cb2 );
add( cb3 );
add( cb4 ); //将4个单选框添加到Panel中
Checkbox cb = new Checkbox( "Filled", false); //创建复选框
add( cb );
}
}
Checkbox中的true和false分别表示默认选择是否选中,addItem为Choice独有的,它就是添加选择项的方法。大家可以看到,对于所有的单选框,定义了一个名为cbg的CheckboxGroup,创建单选框对象的时候要在添加语句中写成“Checkbox 对象= new Checkbox(名称,cbg,false/true)”,即要指定这个对象所在的group的名称。为了在Frame中加入这个类,需要在 Drawing(String ss)中添加add(new MenuDown(), BorderLayout.SOUTH)语句。
最后的类就是画图的面板了,在这里我们使用Canvas来进行处理,现在不处理任何内容,所以可以什么都不写,只是创建一个类即可:
class Draw extends Canvas{}
然后,在Drawing(String ss)中添加add(new Draw(), BorderLayout.CENTER )就可以运行了,大家不妨试一下。下一篇将介绍如何完善这个程序,使得其具有绘图功能。上述创建图形界面的完整代码如下:
import java.awt.*;
public class Drawing extends Frame
{
Drawing(String ss)
{
setTitle(ss);//设置标题
setSize (400,400);//设置大小
setResizable( false );//将大小改为不可更改的
setMenuBar( new MenuUp() );//添加菜单项
add(new MenuDown(), BorderLayout.SOUTH);//在最南边添加MenuDown对象
add(new Draw(), BorderLayout.CENTER );//在中心添加Draw对象
setVisible( true );
addWindowListener( new WindowAdapter(){
public void windowClosing( WindowEvent e ){
System.exit( 0 );
}
});//增加关闭程序功能
}
public static void main(String args[])
{
Drawing d = new Drawing("Paint Program");//创建画图对象
}
class MenuDown extends Panel
{
public MenuDown(Drawing d)
{
Choice ce = new Choice();//创建一个Choice对象
ce.addItem( "Rectangle" );
ce.addItem( "Ellipse" );//定义Choice中的选项
add( ce );//添加Choice对象
CheckboxGroup cbg = new CheckboxGroup();//创建一个单选框的框架
Checkbox cb1 = new Checkbox( "Red", cbg, false );
Checkbox cb2 = new Checkbox( "Green", cbg, false );
Checkbox cb3 = new Checkbox( "Blue", cbg, false );
Checkbox cb4 = new Checkbox( "Black", cbg, true); //创建4个单选框
add( cb1 );
add( cb2 );
add( cb3 );
add( cb4 );//将4个单选框添加到Panel中
Checkbox cb = new Checkbox( "Filled", false);//创建复选框
add( cb );//在Panel中添加复选框
}
}
class MenuUp extends MenuBar
{
public MenuUp(){
Menu m1 = new Menu( "File" );
Menu m2 = new Menu( "Help" );//创建两个菜单目录项
MenuItem mi1 = new MenuItem( "Clear" );
MenuItem mi2 = new MenuItem( "Print" );
MenuItem mi3 = new MenuItem( "Quit" );//创建3个菜单项
m1.add( mi1 );
m1.add( mi2 );
m1.addSeparator();
m1.add( mi3 );//将3个菜单项添加到名为File的菜单下,并加分隔符
add( m1 );
add( m2 );
setHelpMenu( m2 );//将菜单目录项添加到MenuBar中
}
}
class Draw extends Canvas{}
}
