Java GUI编程高级实例二:弹出式菜单及添加工具栏

三、 为组件定制弹出式菜单

问题的提出 

为“Java Editor”程序的文本编辑区域定制如图所示的的弹出式菜单。

Java GUI编程高级实例二:弹出式菜单及添加工具栏

菜单中有五个菜单项组成,分别指示了不同的字体风格,可通过菜单项的选择实现文本区域中文本字体和字号的改变。

用JPopupMenu类建立弹出式菜单

建立弹出式菜单

预先定义一个继承JPopupMenu类的子类,弹出式菜单施加给的对象应由构造方法中的参数接收。本例应是负责文本编辑的多行文本框。

JPopupMenu类的add方法允许向菜单中加入菜单项。弹出式菜单项的激活事件是ActionEvent,可依照多按钮的事件处理方法进行事件处理。

字体风格弹出式菜单的实现:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.BevelBorder;
class FontPopup extends JPopupMenu implements ActionListener{
    String[] item;       Font[] font;
    JMenuItem mt;       JTextArea t;
    FontPopup(JTextArea t){
        this.t = t;
        this.setBorder(new BevelBorder(BevelBorder.RAISED));  //设置立体边框
        item = new String[]{"标准仿宋","粗放行楷","规矩新魏","精致宋体","灵感隶书"};
        font = new Font[]{ new Font("仿宋",0,18),  new Font("华文行楷",0,30),  
            new Font("华文新魏",0,22),   new Font("宋体",0,14),  new Font("隶书",0,20) };
        for(int i=0; i<item.length; i++){
            mt = new JMenuItem(item[i]);  
            mt.setFont(new Font("仿宋",0,14));
            this.add(mt);  
            mt.addActionListener(this);
        }
    }


public void actionPerformed(ActionEvent e) {
        String s = e.getActionCommand();
        int i;
        for( i = 0; i<item.length; i ++)
            if(s.equals(item[i]))break;
        t.setFont(font[i]);
    }
}

为多行文本框定制弹出式菜单

让以上的弹出式菜单对文本框真实可用,就需要对文本框设置事件侦听。可通过MouseEvent的getButton()方法判断用户按下了哪个鼠标键:

MouseEvent.BUTTON1——左键

MouseEvent.BUTTON2——中间键

MouseEvent.BUTTON3——右键

多行文本框带弹出式菜单的实现:

import java.awt.event.*;     
import javax.swing.*; 
class JTextAreaWithMenu extends JTextArea implements MouseListener{ 
 FontPopup fp ; 
 JTextAreaWithMenu(int r,int c) { 
  super(r,c); 
  fp = new FontPopup(this); 
  this.addMouseListener(this); 
  this.add(fp); 
 } 
 public void mousePressed(MouseEvent e){ 
  if(e.getButton()==e.BUTTON3)  fp.show(this,e.getX(),e.getY()); 
 } 
 public void mouseClicked(MouseEvent e){} 
 public void mouseEntered(MouseEvent e){} 
 public void mouseExited(MouseEvent e){} 
 public void mouseReleased(MouseEvent e){} 
}

四、 给GUI应用程序添加工具栏

问题提出 

继续对“Java Editor”项目进行更新,再为界面添加如图所示的工具栏。

Java GUI编程高级实例二:弹出式菜单及添加工具栏

工具栏上流式顺序排放了七个工具按钮,作用分别是:新建文件、打开文件、保存文件、复制、剪切、粘贴、帮助。

工具栏界面设计

步骤:

  1. 创建工具栏对象
  2. 将组件加入到工具栏
  3. 将工具栏加入到应用程序窗口

创建工具栏对象

工具栏用JToolBar类及其子类创建,它是一个容器组件,在工具栏组件中可以容放其他组件。

JToolBar的构造方法

  • public JToolBar():默认方向为水平( HORIZONTAL)。
  • public JToolBar(int orientation):指定方向,参数可选 HORIZONTAL 或 VERTICAL,后者为竖式工具栏。
  • public JToolBar(String name):指定标题,标题浮动时可见。默认的方向为 HORIZONTAL。

将组件加入到工具栏

工具栏设置布局:setLayout方法,默认FlowLayout流式排放。

工具栏添加组件:add方法向。也可通过“addSeparator()”方法在工具栏中加入分隔,以对工具按钮按功能分组。

将工具栏加入到应用程序窗口

JFrame类的add方法,可将工具栏加入进应用程序窗口,同时确定停放位置。

如:

this.add(toolBar,"North"); //加入工具栏并停靠在上边
import java.awt.*; 
import java.awt.event.*; 
import java.io.*;  
import javax.swing.*; 
class EditorToolBar extends JToolBar{ 
 EditorToolBar(JTextArea t){ 
  super("Toolbar for Java Editor"); 
  String[] imgFile = {"new.jpg", "open.jpg","save.jpg", 
   "copy.jpg","cut.jpg","paste.jpg","help.jpg"}; 
  ImageIcon[] toolImage = new ImageIcon[imgFile.length]; 
   JButton [ ]tb = new JButton[imgFile.length]; 
  for(int i = 0; i < imgFile.length; i++) { 
      toolImage[i] = new ImageIcon("graphics\\"+imgFile[i]); 
      tb[i] = new JButton(toolImage[i]); 
      if(i==3 || i==6)this.addSeparator(); 
      this.add(tb[i]); 
  } 
 } 
} 

练习:对以上工具栏上的按钮进行事件处理,并将工具栏加入到“Java Editor”项目中。

125jz网原创文章。发布者:江山如画,转载请注明出处:http://www.125jz.com/4629.html

(0)
江山如画的头像江山如画管理团队
Java GUI编程高级实例一:给应用程序添加菜单
上一篇 2020年1月22日 上午10:59
python 字典使用实例:创建通信录并完成修改、查找操作
下一篇 2020年1月22日 下午4:33

99%的人还看了以下文章

  • oracle 计算时间差,包含年、月、日、时、分、秒

    在做系统时,如图书管理系统、车辆管理系统、事务管理系统等,经常需要我们计算两个日期相差多少天,图书是否应该归还,事情是否完成等。 今天给大家分享oracle 中如何计算时间差! oracle时间差是以天数为单位,所以换算成年月,日 select floor(to_number(sysdate-to_date(‘2018-11-02 15:55:03’,’yy…

    2018年2月13日
    5.0K0
  • 纯JSP实现计算圆的面积和周长

    一个jsp页面由元素和模板数据组成.元素是必须由jsp容器处理的部分.而模板数据是jsp容器不处理的部分,如jsp中的HTML内容 元素有三种类型: 脚本元素,指令元素, 动作元素 脚本元素:包含三个部分:声明,脚本段,表达式 声明:用于声明在其它脚本元素中可以使用的变量和方法 脚本段:是一段java代码 表达式:java语言中完整的表达式 声明 以<…

    2020年4月3日
    24.1K0
  • 各版本MySQL数据库驱动程序jar包大全(java连接mysql驱动jar包)

    java连接mysql数据库,数据库程序开发步骤首先就要加载JDBC驱动程序,不同版本的mysql数据库需要的MySQL数据库驱动程序jar包版本也不同。 不少同学问怎么下载java连接mysql的驱动jar包? 今天给大家分享:各版本MySQL数据库驱动程序jar包大全(java连接mysql驱动jar包) mysql-connector-java-5.1…

    2019年9月28日
    25.1K1
  • 单元测试环境、过程及任务,单元测试快速入门教程二

    单元测试环境及过程 单元测试环境 单元测试环境的建立是单元测试工作进行的前提和基础,在测试过程中起到的作用不言而喻。单元测试环境并不一定是系统投入使用后所需的真实环境,可采用模拟环境。 由于一个模块或一个方法(Method)不是一个独立的程序,在测试时要考虑它和外界的联系,因此要用到一些辅助模块来模拟与所测模块相联系的其它模块。辅助模块分两种: 驱动模块:相…

    2018年4月16日
    10.2K0
  • HTTP错误 403.14 服务器配置为不列出此目录内容

    HTTP错误 403.14 服务器配置为不列出此目录内容HTTP错误 403.14 服务器配置为不列出此目录内容HTTP错误 403.14 服务器配置为不列出此目录内容HTTP错误 403.14 服务器配置为不列出此目录内容

    开发一个企业网站,使用ASP技术,在本地通过IIS管理器调试,出现 如下问题: HTTP 错误 403.14 – Forbidden Web 服务器被配置为不列出此目录的内容 解决方法: 在”功能视图“,中找到”目录浏览“,双击进入 在目录浏览右侧操作中选择”启用“! 这时再浏览网站,可以看到已经不报错了,但是网站是以文件目录的形式展现的! 这是…

    2018年7月3日 编程开发
    5.6K0
  • JQuery change ()、.on(‘change’, function (){})事件只触发一次原因详解

    JQuery中使用  $(“input”).on(“change”,function(){})  仅仅会触发一次,第二次点击或输入不再触发。 JQuery change ()、.on(‘change’, function (){})事件只触发一次解决方法 (1)用jQuery的live代…

    2019年11月13日
    11.2K0

发表回复

登录后才能评论