关闭

Java中菜单组件的实例:文本编辑器

发表于:2010-8-11 10:46

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:ryj111    来源:51Testing软件测试网采编

#
java
#
Java
#
JAVA
  1.使用菜单的两种方式

  菜单通常有两种使用方式:窗口菜单和快捷菜单

  1)窗口菜单

  窗口菜单式相对于窗口的,它出现在窗口的标题栏下,总是与窗口同时出现。

  JAVA的窗口菜单有菜单栏JMenuBar、菜单JMenu和菜单项JMenuItem等组件共同完成。窗口上添加菜单栏,菜单栏中添加菜单,菜单中添加菜单项或子菜单,这样就形成了窗口菜单的多层结构。菜单栏添加在窗口上方,不受布局管理器的控制。

  2)快捷菜单

  快捷菜单则是相对于某个制定组件的,当鼠标指向某组件并单击右键时,则会弹出一个菜单,这个菜单称为快捷菜单。快捷菜单也有若干菜单项组成,快捷菜单的结构比较简单,一般只有二级子菜单。

  JAVA的快捷菜单是JPopupMenu组件。任何Component组件都可以调用add()方法添加快捷菜单,快捷菜单也不受布局管理器的控制。显示快捷菜单时,必须为其指定位置。

  2.文本编辑器的实例

  本例是一个简化的文本编辑器,可实现对文本区选中字符串进行剪切、复制、粘贴等操作,可以改变文本区文字的颜色,大小,字体,当字号值出错或不合适时,弹出提示对话框。演示了文本区、复选框组件的使用方法,演示菜单、快捷菜单的使用方法,其中使用了java.awt.Font字体类。程序运行的结果如下:

  程序如下:
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在界面设计中菜单、文本区、复选框、快捷键等组件的使用方法,这是每一个桌面应用程序都有的,应该掌握。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号