菜单通常有两种使用方式:窗口菜单和快捷菜单
1)窗口菜单
窗口菜单式相对于窗口的,它出现在窗口的标题栏下,总是与窗口同时出现。
JAVA的窗口菜单有菜单栏JMenuBar、菜单JMenu和菜单项JMenuItem等组件共同完成。窗口上添加菜单栏,菜单栏中添加菜单,菜单中添加菜单项或子菜单,这样就形成了窗口菜单的多层结构。菜单栏添加在窗口上方,不受布局管理器的控制。
2)快捷菜单
快捷菜单则是相对于某个制定组件的,当鼠标指向某组件并单击右键时,则会弹出一个菜单,这个菜单称为快捷菜单。快捷菜单也有若干菜单项组成,快捷菜单的结构比较简单,一般只有二级子菜单。
JAVA的快捷菜单是JPopupMenu组件。任何Component组件都可以调用add()方法添加快捷菜单,快捷菜单也不受布局管理器的控制。显示快捷菜单时,必须为其指定位置。
2.文本编辑器的实例
本例是一个简化的文本编辑器,可实现对文本区选中字符串进行剪切、复制、粘贴等操作,可以改变文本区文字的颜色,大小,字体,当字号值出错或不合适时,弹出提示对话框。演示了文本区、复选框组件的使用方法,演示菜单、快捷菜单的使用方法,其中使用了java.awt.Font字体类。程序运行的结果如下:
程序如下:
3.总结
本实例主要演示了JAVA在界面设计中菜单、文本区、复选框、快捷键等组件的使用方法,这是每一个桌面应用程序都有的,应该掌握。
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class EditJFrame extends JFrame implements ActionListener, ItemListener, MouseListener { private JTextField textSize; private JCheckBox boxBold,boxItalic; private JButton buttonCut,buttonCopy,buttonPaste; private JTextArea textArea; private JPopupMenu popupMenu; private JDialog dialog; private JLabel labelDialog; private JRadioButtonMenuItem red,blue,green; private JCheckBoxMenuItem CboxBold,CboxItalic; public EditJFrame() { super("文本编辑器"); this.setSize(500,300); this.setLocation(300, 240); this.setDefaultCloseOperation(EXIT_ON_CLOSE); textArea = new JTextArea("北京北京我爱你!"); textArea.addMouseListener(this); this.add(textArea); JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT)); this.add(panel,"North"); textSize = new JTextField("12",10); panel.add(textSize); textSize.addActionListener(this); boxBold = new JCheckBox("粗体"); panel.add(boxBold); boxBold.addItemListener(this); boxItalic = new JCheckBox("斜体"); panel.add(boxItalic); boxItalic.addItemListener(this); this.addmyMenu(); this.setVisible(true); } private void addmyMenu() { // TODO Auto-generated method stub JMenuBar menuBar = new JMenuBar(); this.setJMenuBar(menuBar); JMenu menuFile = new JMenu("文件"); menuBar.add(menuFile); menuFile.add(new JMenuItem("打开")); menuFile.add(new JMenuItem("保存")); menuFile.addSeparator(); JMenuItem menuExit = new JMenuItem("退出"); menuFile.add(menuExit); menuExit.addActionListener(this); JMenu menuEdit = new JMenu("编辑"); menuBar.add(menuEdit); JMenu menuStyle = new JMenu("字形"); CboxBold =new JCheckBoxMenuItem("粗体"); CboxItalic = new JCheckBoxMenuItem("斜体"); menuStyle.add(CboxBold); menuStyle.add(CboxItalic); CboxBold.addItemListener(this); CboxItalic.addItemListener(this); menuEdit.add(menuStyle); JMenu menuColor = new JMenu("颜色"); menuEdit.add(menuColor); ButtonGroup buttonGroup = new ButtonGroup(); red = new JRadioButtonMenuItem("红",false); buttonGroup.add(red); menuColor.add(red); red.addItemListener(this); green = new JRadioButtonMenuItem("绿",false); buttonGroup.add(green); menuColor.add(green); green.addItemListener(this); blue = new JRadioButtonMenuItem("蓝",false); buttonGroup.add(blue); menuColor.add(blue); blue.addItemListener(this); menuBar.add(new JMenu("帮助")); popupMenu = new JPopupMenu(); JMenuItem itemCut = new JMenuItem("剪切"); itemCut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_DOWN_MASK)); popupMenu.add(itemCut); itemCut.addActionListener(this); JMenuItem itemCopy = new JMenuItem("复制"); itemCopy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_DOWN_MASK)); popupMenu.add(itemCopy); itemCopy.addActionListener(this); JMenuItem itemPaste = new JMenuItem("粘贴"); itemPaste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_DOWN_MASK)); popupMenu.add(itemPaste); itemPaste.addActionListener(this); textArea.add(popupMenu); dialog = new JDialog(this,"提示"); dialog.setSize(240,100); labelDialog = new JLabel("",JLabel.CENTER); dialog.add(labelDialog); dialog.setDefaultCloseOperation(HIDE_ON_CLOSE); } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(e.getActionCommand() == "退出") { System.exit(0); } if(e.getActionCommand() == "剪切") { textArea.cut(); } if(e.getActionCommand() == "复制") { textArea.copy(); } if(e.getActionCommand() == "粘贴") { textArea.paste(); } if(e.getSource() == textSize) { int size = 0; try { size = Integer.parseInt(textSize.getText()); if (size <= 0 || size >72) throw new Exception("SizeException"); java.awt.Font font = textArea.getFont(); textArea.setFont(new Font(font.getName(),font.getStyle(),size)); } catch(NumberFormatException nfe) { labelDialog.setText("\""+textSize.getText()+"\"不能转换成整数,请重新输入!"); dialog.setLocation(this.getX()+100,this.getY()+100); dialog.setVisible(true); } catch(Exception ex) { if(ex.getMessage() == "SizeException") { labelDialog.setText(size + " 字号不合适,请重新输入!"); dialog.setLocation(this.getX()+100,this.getY()+100); dialog.setVisible(true); } } finally{} } } public void itemStateChanged(ItemEvent e) { Font font = textArea.getFont(); int style = font.getStyle(); if(e.getSource() == boxBold || e.getSource() == CboxBold) { style ^= 1; } if(e.getSource() == boxItalic || e.getSource() == CboxItalic) { style ^= 2; } if(e.getSource() == red) { textArea.setForeground(Color.red); } if(e.getSource() == green) { textArea.setForeground(Color.green); } if(e.getSource() == blue) { textArea.setForeground(Color.blue); } textArea.setFont(new Font(font.getName(),style,font.getSize())); } //也可以通过适配器实现 public void mouseClicked(MouseEvent mec) { if(mec.getModifiers() == mec.BUTTON3_MASK) popupMenu.show(textArea, mec.getX(), mec.getY()); } public void mouseEntered(MouseEvent arg0) {} public void mouseExited(MouseEvent arg0) {} public void mousePressed(MouseEvent arg0) { } public void mouseReleased(MouseEvent arg0) { } public static void main(String[] args) { // TODO Auto-generated method stub new EditJFrame(); } } |
3.总结
本实例主要演示了JAVA在界面设计中菜单、文本区、复选框、快捷键等组件的使用方法,这是每一个桌面应用程序都有的,应该掌握。