编程语言
首页 > 编程语言> > java.awt.swing菜单组件

java.awt.swing菜单组件

作者:互联网

在应用系统开发中,菜单组件是经常使用的组件,菜单组件包括下拉式菜单和弹出式菜单。下拉式菜单包含若干个菜单项,每个菜单项在用户单击时引发一个动作,菜单可以看做一组层次化管理的命令集合。弹出式菜单也称为快捷菜单,它是相当于某个指定组件的,当该组件受到鼠标单击时,会弹出一个菜单,这个菜单就是弹出式菜单。弹出式菜单的结构比较简单,最多只有二级菜单。

12.3.1 JMenu

在Java中实现下拉式菜单,可以使用JMenu菜单组件。JMenuBar组件是用来摆放JMenu的菜单栏组件,当创建很多JMenu组件后,需要通过JMenuBar组件将JMenu组件加入到窗体中。接下来先了解一下JMenu类的常用方法,如表12.14所示。

常用方法

功能描述

public JMenu()

构造没有文本的新 JMenu

public JMenu(String s)

构造一个新 JMenu,用提供的字符串作为其文本

public JMenu(String s, boolean b)

构造一个新 JMenu,用提供的字符串作为其文本并指定其是否为分离式 (tear-off) 菜单

JMenuItem add(JMenuItem item)

将某个菜单项追加到此菜单的末尾。

void addSeparator()

将新分隔符追加到菜单的末尾。

void remove(int pos)

从此菜单移除指定索引处的菜单项。

void remove(JMenuItem item)

从此菜单移除指定的菜单项。

void removeAll()

从此菜单移除所有菜单项。

insert(JMenuItem mi,int pos)

在给定位置插入指定的 JMenuitem

setSelected(boolean b)

设置菜单的选择状态

表12.14中列举了JMenu类的常用方法,接下来通过一个案例来演示下拉式菜单的使用,如例12-13所示。

例12-13  Demo1213.java

 1import java.awt.*;
 2import javax.swing.*;
 3import java.awt.event.ActionEvent;
 4import java.awt.event.KeyEvent;
 5
 6public class Demo1213 {
 7    public static void main(String[] args) {
 8        final JFrame jFrame = new JFrame("JFrame窗口");
 9        JMenuBar jMenuBar = new JMenuBar();		// 创建菜单栏
 10        jFrame.setJMenuBar(jMenuBar);
 11        // 创建菜单
 12        JMenu jMenu = new JMenu("文件(F)");
 13        jMenuBar.add(jMenu);
 14        jMenu.setMnemonic(KeyEvent.VK_F);    //设置快速访问符
 15        JMenuItem item=new JMenuItem("新建(N)",KeyEvent.VK_N);
 16        item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,   ActionEvent.CTRL_MASK));
 17        jMenu.add(item);
 18        item=new JMenuItem("打开(O)",KeyEvent.VK_O);
 19        item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,ActionEvent.CTRL_MASK));
 20        jMenu.add(item);
 21        item=new JMenuItem("保存(S)",KeyEvent.VK_S);
 22        item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,ActionEvent.CTRL_MASK));
 23        jMenu.add(item);
 24        jMenu.addSeparator();
 25        item=new JMenuItem("退出(E)",KeyEvent.VK_E);
 26        item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E,ActionEvent.CTRL_MASK));
 27        jMenu.add(item);
 28
 29        jMenu.addSeparator();								// 添加分隔符
 30        jFrame.setLayout(new FlowLayout()); 				// 设置布局
 31        jFrame.setSize(300, 150);
 32        // 设置窗体关闭方式
 33        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 34        jFrame.setVisible(true);
 35
 36    }
 37}

程序的运行结果如图12.15所示。

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

图12.15中,运行程序先创建了JFrame窗体,然后创建菜单栏、菜单、菜单项,调用setJMenuBar(JMenuBar menuBar)方法将菜单栏添加进窗体,在“退出”菜单项中添加事件监听,点击“退出”窗体立即关闭。

提示:快速访问符是一种快捷键,通常在按下 Alt 键和某个字母时激活。例如,常用的 Alt+F 是“文件” 菜单的快速访问符。

12.3.1 JPopMenu

弹出式菜单,如果要在Java中实现此菜单,可以使用JPopupMenu菜单组件,先来了解一下它的常用方法,如表12.15所示。

构造方法

功能描述

public JPopupMenu()

构造一个不带“调用者”的 JPopupMenu。

public JPopupMenu(String label)

构造一个具有指定标题的 JPopupMenu。

public JMenuItem add(JMenuItem item)

将菜单项添加到弹出式菜单的末尾,设置弹出式菜单的可见性

表12.15中列出了JPopupMenu类的构造方法,它的常用方法和JMenu类似,这里就不再赘述,读者可以参考JDK的使用文档,接下来通过一个案例来演示弹出式菜单的使用,如例12-14所示。

例12-14  Demo1214.java

 1import java.awt.*;
 2import java.awt.event.*;
 3import javax.swing.*;
 4public class TestJPopupMenu {
 5	public static void main(String[] args) {
 6		final JFrame jf = new JFrame("JFrame窗口"); 	// 创建JFrame窗体
 7		final JPopupMenu jpm = new JPopupMenu();		// 创建菜单
 8		// 创建两个菜单项
 9		JMenuItem item1 = new JMenuItem("保存");
 10		JMenuItem item2 = new JMenuItem("退出");
 11		// 为第二个菜单项添加事件监听
 12		item2.addActionListener(new ActionListener() {
 13			public void actionPerformed(ActionEvent e) {
 14				jf.dispose();
 15			}
 16		});
 17		jpm.add(item1);									// 将菜单项添加到菜单
 18		jpm.add(item2);
 19		// 为JFrame添加鼠标点击事件监听器
 20		jf.addMouseListener(new MouseAdapter() {
 21			public void mouseClicked(MouseEvent e) {
 22				if (e.getButton() == e.BUTTON3) {
 23					jpm.show(e.getComponent(), e.getX(), e.getY());
 24				}
 25			}
 26		});
 27		jf.setLayout(new FlowLayout()); 				// 设置布局
 28		jf.setSize(200, 150);
 29		// 设置窗体关闭方式
 30		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 31		jf.setVisible(true);
 32	}
 33}

程序的运行结果如图12.16所示。

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

图12.16中,运行程序弹出JFrame窗口,在窗口中点击右键,会弹出菜单栏,点击退出,窗口成功关闭。例12-14中,先创建了JFrame窗体,然后创建菜单、菜单项,在“退出”的菜单项中添加事件监听,点击“退出”窗体就会关闭,最后为JFrame窗体添加鼠标点击事件监听器,实现右键弹出菜单的效果。

12.3.1 JTable

表格也是Swing GUI编程中常用的组件,表格是一个由行、列组成的二维显示区域,Swing的JTable提供了对表格的支持,通过使用JTable创建表格是非常容易的,它的构造方法如表12.16所示。

构造方法

功能描述

public JTable()

构造一个默认的JTable,使用默认的数据模型、默认的列模型和默认的选择模型对其进行初始化。

public JTable(int numRows, int c)

使用 DefaultTableModel 构造具有 numRows 行和 numColumns 列个空单元格的 JTable。

public (Object[][] rowData, Object[] obj)

构造一个 JTable 来显示二维数组 rowData 中的值,其列名称为 columnNames。

public (TableModel dm)

构造一个 JTable,使用数据模型 dm、默认的列模型和默认的选择模型对其进行初始化。

public JTable(TableModel dm, TableColumnModel cm)

构造一个 JTable,使用数据模型 dm、列模型 cm 和默认的选择模型对其进行初始化。

表12.16列举了JTable类的构造方法,它在创建的时候,可以把一个二维数据包装成一个表格,这个二维数据既可以是一个二维数组,也可以是集合元素为Vector的Vector对象,为了给表格每列设置列标题,还需要传入一个一维数据作为列标题,接下来通过一个案例来演示JTable类的使用,如例12-15所示。

例12-15  Demo1215.java

 1import javax.swing.*;
 2public class Demo1215{
 3	public static void main(String[] args) {
 4	   JFrame jFrame = new JFrame("JFrame窗口"); 		// 创建JFrame窗体
 5        String[] arr = { "序号", "城市", "景点" };	   // 定义标题
 6        // 定义表格数据
 7        Object[][] data = { new Object[] { 1, "焦作市", "红旗渠" },
 8        new Object[] { 2, "林州市", "云台山" },
 9        new Object[] { 3, "驻马店市", "嵖岈山" } };
 10        // 创建JTable
 11        JTable table = new JTable(data, arr);
 12        jFrame.add(new JScrollPane(table));
 13        jFrame.setSize(300, 160);
 14        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 15        jFrame.setVisible(true);
 16	}
 17}

程序的运行结果如图12.17所示。

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

图12.17中,程序运行先创建了JFrame窗体,然后定义了表格标题和数据的两个数组,最后创建JTable时将两个数组以参数传入,利用JTable类成功展现了一个表格。

标签:JFrame,java,awt,JTable,菜单,swing,new,public,JMenu
来源: https://blog.51cto.com/u_2096101/2985363