JAVA中菜单组件的实例:文本编辑器
来源:互联网 发布:淘宝助理批量添加水印 编辑:程序博客网 时间:2024/06/05 19:27
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在界面设计中菜单、文本区、复选框、快捷键等组件的使用方法,这是每一个桌面应用程序都有的,应该掌握。
- JAVA中菜单组件的实例:文本编辑器
- QT编程实例1--简单的文本编辑器(中)
- Win10 右键菜单添加文本编辑器的菜单项
- Java右键菜单实现文本组件内容的的复制、粘贴、剪切功能
- Java做的文本编辑器
- 菜单组件实例-源码
- UMEditor调整文本编辑器的组件位置的方法
- 在extjs中实现的文本编辑器
- java写的分页文本编辑器
- 由Java实现简单的文本编辑器
- 用JAVA语言编写的文本编辑器
- 用JAVA语言编写的文本编辑器
- 简单的java文本编辑器源码
- Java实现简易的文本编辑器
- Qt 实例1 文本编辑器
- 最好的文本编辑器SciTE配置方法详细实例
- QT编程实例1--简单的文本编辑器(上)
- QT编程实例1--简单的文本编辑器(下)
- 开发人员绝对值得访问的网站
- 多线程使用注意
- 初来炸到
- treeview的属性
- 实验室的生活
- JAVA中菜单组件的实例:文本编辑器
- 号外:BlackBerry 6.0 开发工具,9800 OS 6.0模拟器已公开发布!
- 磁珠,磁珠工作原理,与电感区别,磁珠的选型以及在开关电源中的应用(转)
- 终于能跟大家学习了
- 关于C和C++头文件的小记
- 在c++中如何用new生成一个构造函数带参数的类数组(转载整理)
- 飞屏的简单实现
- 笔记: Lua标准库: table函数, 数学函数, 字符串函数/格式化/配对, WoW新增函数, 函数别名
- PCB 设计工作流程