Welcome

首页 / 软件开发 / JAVA / java弹出式菜单

java弹出式菜单2007-05-29 yycnet.yeah.net yyc译JPopupMenu的执行看起来有一些别扭:我们必须调用enableEvents()方法并选择鼠标事件代替利用事件接收器。它可能增加一个鼠标接收器但MouseEvent从isPopupTrigger()处不会返回真值——它不知道将激活一个弹出菜单。另外,当我们尝试接收器方法时,它的行为令人不可思议,这或许是鼠标单击活动引起的。在下面的程序例子里一些事件产生了这种弹出行为:
//: Popup.java// Creating popup menus with Swingpackage c13.swing;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Popup extends JPanel {JPopupMenu popup = new JPopupMenu();JTextField t = new JTextField(10);public Popup() {add(t);ActionListener al = new ActionListener() {public void actionPerformed(ActionEvent e){t.setText(((JMenuItem)e.getSource()).getText());}};JMenuItem m = new JMenuItem("Hither");m.addActionListener(al);popup.add(m);m = new JMenuItem("Yon");m.addActionListener(al);popup.add(m);m = new JMenuItem("Afar");m.addActionListener(al);popup.add(m);popup.addSeparator();m = new JMenuItem("Stay Here");m.addActionListener(al);popup.add(m);PopupListener pl = new PopupListener();addMouseListener(pl);t.addMouseListener(pl);}class PopupListener extends MouseAdapter {public void mousePressed(MouseEvent e) {maybeShowPopup(e);}public void mouseReleased(MouseEvent e) {maybeShowPopup(e);}private void maybeShowPopup(MouseEvent e) {if(e.isPopupTrigger()) {popup.show(e.getComponent(), e.getX(), e.getY());}}}public static void main(String args[]) {Show.inFrame(new Popup(),200,150);}} ///:~
相同的ActionListener被加入每个JMenuItem中,使其能从菜单标签中取出文字,并将文字插入JTextField。