三、 为组件定制弹出式菜单
问题的提出
为“Java Editor”程序的文本编辑区域定制如图所示的的弹出式菜单。

菜单中有五个菜单项组成,分别指示了不同的字体风格,可通过菜单项的选择实现文本区域中文本字体和字号的改变。
用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”项目进行更新,再为界面添加如图所示的工具栏。

工具栏上流式顺序排放了七个工具按钮,作用分别是:新建文件、打开文件、保存文件、复制、剪切、粘贴、帮助。
工具栏界面设计
步骤:
- 创建工具栏对象
- 将组件加入到工具栏
- 将工具栏加入到应用程序窗口
创建工具栏对象
工具栏用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
微信扫一扫
支付宝扫一扫