如何在弹出菜单中刷新项目?

时间:2013-05-04 11:49:43

标签: refresh jmenuitem jpopupmenu

我有一个弹出菜单(当用户使用右键单击指定元素时出现),从列表中读取项目。 我希望当选择一个项目时,该项目在popupMenu中被禁用(如果某个动作发生,它将返回启用)。  我已经实现了popupMenu,但是我无法实现这个启用/禁用JMenuItem元素。有人可以帮帮我吗?感谢

    class PopupTriggerListener extends MouseAdapter {
      public void mousePressed(MouseEvent ev) {
        if (ev.isPopupTrigger()) {
          menu.show(ev.getComponent(), ev.getX(), ev.getY());
          x = ev.getX();
          y = ev.getY();
        }
      }

      public void mouseReleased(MouseEvent ev) {
        if (ev.isPopupTrigger()) {
          menu.show(ev.getComponent(), ev.getX(), ev.getY());
          x = ev.getX();
          y = ev.getY();
        }
      }

      public void mouseClicked(MouseEvent ev) {
      }
    }
   }

      JLabel label = new MyLabel("right-click");

        public Test() {
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            JMenuItem item = new JMenuItem("Test1");
            item.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent e) {

        System.out.println("Menu item Test1");
        JLabel newLabel = new JLabel("test");
        label.add(newLabel);
        newLabel.setBounds(x, y, 40, 10);
              }
            });
      menu.add(item);

      item = new JMenuItem("Test2");
      item.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          System.out.println("Menu item Test2");
        }
      });
      menu.add(item);

      getContentPane().add(label);
      pack();
      setSize(300, 100);
    }

    public static void main(String[] args) {
      new Test().setVisible(true);
    }

1 个答案:

答案 0 :(得分:0)

这种方式主要是使用Actions。操作是ActionListener接口的扩展。例如,您可以将Action设置为JMenuItem,并在您可以设置的Action中设置为false。这将自动禁用JMenuItem。或者,您可以通过在Action上将enabled设置为true来启用它。 这是Action API @Oracle:Action API JAVA

以下是关于如何使用操作的讨论:How to use Actions JAVA