菜单栏的搭建
menu在控件里扮演着十分重要的角色,我们来看下官方的解释
Creating a Menu and inserting it into a MenuBar is easy, as shown below:
final Menu menu1 = new Menu(“File”);
MenuBar menuBar = new MenuBar();
menuBar.getMenus().add(menu1);
A Menu is a subclass of MenuItem which means that it can be inserted into a Menu’s items ObservableList, resulting in a submenu being created:
MenuItem menu12 = new MenuItem(“Open”);
menu1.getItems().add(menu12);
1The items ObservableList allows for any MenuItem type to be inserted, including its subclasses Menu, MenuItem, RadioMenuItem, CheckMenuItem, CustomMenuItem and SeparatorMenuItem. In order to insert an arbitrary Node to a Menu, a CustomMenuItem can be used. One exception to this general rule is that SeparatorMenuItem could be used for inserting a separator.
定义menuItem对象,将menuItem放入menu中,再将menu放入menubar中。
menu是菜单就像我们生活的菜单一样,菜单里面有很多菜
menuItem是菜单项,就像菜单里具体的哪个菜
menubar是菜单条,就像目录或者体系包含多个菜单就像中菜单和西菜单
我们在创建一个叫notebook一个类,类里先创建menu,menuItem,menubar对象,我们先简单一点,先创建一个menubar,menubar里只有一个menu,menu里面只有一个menuItem。因为多个的时候是一样的方法,大家先掌握最简单的创建菜单方法,面对复杂一点的相信大家也能够写出来。
我们参考一下我们Windows的记事本第一个menu是文件,然后menuItem是新建。
将menuItem加入到menu中,再将menu加入menubar中。再把menubar用setmenubar方法加入我们的界面中。
package test;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import javax.swing.JFrame;
public class notebook extends JFrame
{
private Menu menu=null;//声明menu对象
private MenuItem menuItem=null;//声明menuItem对象
private MenuBar menubar=null;//声明menubar对象
public static void main(String[] args)
{
// TODO Auto-generated method stub
notebook n=new notebook();
}
public notebook()
{
menubar=new MenuBar();
menu=new Menu("文件");
menuItem=new MenuItem("新建");
menu.add(menuItem);
menubar.add(menu);
this.setMenuBar(menubar);
//界面的基本设置
this.setSize(700,500);
this.setLocation(100,100);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
我们来看一下效果
、
接下来我们添加可编辑空白区域,在java中,这个控件叫JTextArea。利用add方法就可以将他加入进我们的界面了。我在这里顺便把menu和menuItem补齐(我们只做部分功能)。
package test;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.TextArea;
import javax.swing.JFrame;
import javax.swing.JMenu;
public class notebook extends JFrame
{
private String smenu[]= {"文件","编辑","格式","查看","帮助"};
private String smenuitem[][]= {
{"新建(N)","打开(O)","保存(S)","另存为(A)","退出(X)"},
{"撤销(U)","剪切(T)","复制(C)","粘贴(P)"},
{"自动换行(W)"},
{"状态栏(S)"},
{"关于记事本(A)"}};
private Menu menu[]=new Menu[5];
private MenuItem [][]menuItem=new MenuItem[5][5];
private MenuBar menubar=new MenuBar();
private JTextArea textarea=new JTextArea() ;
public static void main(String[] args)
{
// TODO Auto-generated method stub
notebook n=new notebook();
}
public notebook()
{
for(int i=0;i<smenu.length;i++)
{
menu[i]=new Menu(smenu[i]);
menubar.add(menu[i]);
}
for(int i=0;i<smenuitem.length;i++)
{
for(int j=0;j<smenuitem[i].length;j++)
{
menuItem[i][j]=new MenuItem(smenuitem[i][j]);
menu[i].add(menuItem[i][j]);
}
}
this.setMenuBar(menubar);
this.add(textarea);
this.setSize(700,500);
this.setLocation(100,100);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
我们再来看一下效果
接下来我们增加控件监听,控件监听的方法是addActionListener,在这个方法里我们放入this参数即可。在notebook类记得添加ActionListener接口。加入actionPerformed接口需要重写actionPerformed方法,我们可以简单的验证各个按钮是否灵敏(按下哪个按钮就输出那个按钮的名字)。
代码如下:
package test;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JMenu;
public class notebook extends JFrame implements ActionListener//加入接口
{
private String smenu[]=