上一次总结了如何在一个Frame里添加多个Panel,我写的代码里在一个按照GridLayout(网格)布局的Frame添加了4个Panel,各按照BorderLayout(东南西北中,是默认),FlowLayout(顺序),GridLayout(网格),CardLayout(卡片)的Panel。这一次我在这个的基础上进行了扩充,加入了菜单栏,文本域,文件对话框,复选框,下拉列表。
要创建菜单栏,首先要有个MenuBar(菜单栏),再向其中加入Menu(菜单项),再向每个菜单项中加入MenuItem(菜单项元素),看代码
MenuBar mb=new MenuBar();
Menu mn1=new Menu("我喜欢");
Menu mn2=new Menu("点秋香");
MenuItem mi1=new MenuItem("第一个玩家");
MenuItem mi2=new MenuItem("第二个玩家");
MenuItem mi3=new MenuItem("退出");
mi3.addActionListener(new ActionListener() //事件监听
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
MenuItem mi4=new MenuItem("打开");
mi4.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
FileDialog fd=new FileDialog(f,"打开文件",FileDialog.LOAD); //FileDialog分为Load和Save两种模式
fd.setVisible(true);
String strFile=fd.getDirectory()+fd.getFile();
try
{
byte[] buf=new byte[1024*10];
FileInputStream fis=new FileInputStream(strFile);
int length=fis.read(buf);
final Frame f1=new Frame();
f1.setSize(400,600);
f1.setLocation(400,400);
TextArea ta=new TextArea();
f1.add(ta);
ta.append(new String(buf,0,length));
f1.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
f1.dispose();
}
});
f1.setVisible(true);
}
catch(Exception ex)
{
ex.printStackTrace();
System.exit(0);
}
}
});
mn1.add(mi1);
mn1.add(mi2);
mn1.add(mi4);
mn2.add(mi3);
mb.add(mn1);
mb.add(mn2);
f.setMenuBar(mb);
在这上面的一段代码中,我菜单mn1中的菜单项mi4,被点击以后,可以带开一个文件对话框,可以选择文件,然后在新弹出的窗口F1中显示出这些文件中的内容。
在菜单mn2的菜单项mi3点击可以退出整个程序。
另外,我为新弹出的窗口f1也设置了WindowListener,当执行关闭操作的时候,不应该调用 System.exit(0),那样只会让整个程序退出。应该调用dispose()让当前的窗口隐藏。
另两次总结的代码综合在一起。在java.awt的练习代码文章中,有注释。