Ошибки JPopupMenu, не выбирая или закрываясь

Хорошо, таким образом, вот моя проблема:

У меня есть приложение, я работаю с этим, создает Диалоговое окно, которое имеет JTree в нем. когда кто-то щелкает правой кнопкой по JTree, я должен определить если в папке 2010 года. Если это, я должен создать всплывающее меню с одной опцией: "Мигрируйте на 2011".

Я имел, имею, теперь то, что у меня есть всплывающее окно меню с правильным текстом, и близко когда я нажимаю на него или когда я нажимаю прочь. Однако, когда я нажимаю на Migrate к 2011, ничего не происходит, он, привычка выполняет мой ActionPerformed, и делает странное высвечивание на вершине диалогового окна.

Я создал новый класс для попытки к diagnos проблемы, но сталкиваюсь с новой проблемой. Это - класс стороны, который я сделал, чтобы попытаться выяснить то, что было неправильным, когда я выполняю его, он заполняет прекрасный и открывает прекрасный пункт меню. Однако при нажатии на пункт меню, он на самом деле не закрывает меню, вместо этого он только выполняет метод ActionPerformed и ничто иное.

Вот пример кода:

//Import statements

public class MainClass extends JPanel {

  public MainClass() {
    final JPopupMenu popup = new JPopupMenu();
    final JTree tree;
    final JTextField jtf;

    JMenuItem menuItem = new JMenuItem("Migrate to 2011");
    ActionListener actionlistener = new PopupActionListener();
    menuItem.addActionListener(actionlistener);
    popup.add(menuItem);

    DefaultMutableTreeNode top = new DefaultMutableTreeNode("Options");

    DefaultMutableTreeNode a = new DefaultMutableTreeNode("A");
    top.add(a);
    DefaultMutableTreeNode a1 = new DefaultMutableTreeNode("A1");
    a.add(a1);
    DefaultMutableTreeNode a2 = new DefaultMutableTreeNode("A2");
    a.add(a2);

    DefaultMutableTreeNode b = new DefaultMutableTreeNode("B");
    top.add(b);
    DefaultMutableTreeNode b1 = new DefaultMutableTreeNode("B1");
    b.add(b1);
    DefaultMutableTreeNode b2 = new DefaultMutableTreeNode("B2");
    b.add(b2);
    DefaultMutableTreeNode b3 = new DefaultMutableTreeNode("B3");
    b.add(b3);

    tree = new JTree(top);

    JScrollPane jsp = new JScrollPane(tree);

    add(jsp, BorderLayout.WEST);

    jtf = new JTextField("", 20);
    add(jtf, BorderLayout.EAST);

    tree.addMouseListener(new MouseAdapter() {
      public void mouseClicked(MouseEvent ae) {
        popup.setVisible(false);
        TreePath tp = tree.getPathForLocation(ae.getX(), ae.getY());
        if (tp != null)
          jtf.setText(tp.toString());
        else
          jtf.setText("");

        if(SwingUtilities.isRightMouseButton(ae)){
            popup.setLocation(ae.getLocationOnScreen());
            popup.setVisible(true);
        }   
      }
    });

  }

    class PopupActionListener implements ActionListener {
          public void actionPerformed(ActionEvent ae) {
            System.out.println("it works!");
          }
        }

  public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.getContentPane().add(new MainClass());

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(300, 450);
    frame.setVisible(true);
  }
}
1
задан SomeoneRandom 20 July 2010 в 20:16
поделиться

2 ответа

Правильный способ показать JPopupMenu - использовать его show метод. Посмотрите на API:

В дополнение к этому я предлагаю использовать Actions вместо простых слушателей действий. Они более гибкие и могут быть использованы не только в меню, но и на панелях инструментов и т.д. Вот что можно почитать о действиях:

http://download.oracle.com/docs/cd/E17409_01/javase/tutorial/uiswing/misc/action.html

1
ответ дан 2 September 2019 в 22:53
поделиться

Использовать событие mouseReleased в mouseAdapter

public void mouseReleased(MouseEvent ae) { 
   if(ae.isPopupTrigger()){
       popup.show(ae.getComponent(),ae.getX(),ae.getY());
   }
    TreePath tp = tree.getPathForLocation(ae.getX(), ae.getY()); 
    if (tp != null) 
      jtf.setText(tp.toString()); 
    else 
      jtf.setText(""); 
  } 
1
ответ дан 2 September 2019 в 22:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: