2012-05-28 43 views
4

我的代码:添加到JPopupMenu的JPanel的

class PanelGlowny extends JPanel implements ActionListener{} 

public class Formatka extends JFrame implements ActionListener{ 

private JMenuItem klienciMenuItem = new JMenuItem("Klienci"); 
private JPopupMenu menuPopup = new JPopupMenu(); 
private PanelGlowny panelGlowny = new PanelGlowny(); 


public Formatka() { 

    add(panelGlowny, BorderLayout.CENTER); 
    menuPopup.add(klienciMenuItem); 
    panelGlowny.setComponentPopupMenu(menuPopup); 


    } 
} 

而且我没有看到弹出菜单当我点击鼠标右键。 为什么?

+0

'我没有看到弹出菜单当我点击鼠标右键。为什么?'没有人知道,发布[SSCCE](http://sscce.org/) – mKorbel

+0

你是否来自波兰? Klienci to polskiesłowoxD – barwnikk

回答

8

适用于加入JPanel

import java.awt.EventQueue; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JMenuItem; 
import javax.swing.JPanel; 
import javax.swing.JPopupMenu; 

public class Formatka extends JPanel { 

    private JMenuItem klienciMenuItem = new JMenuItem("Klienci"); 
    private JPopupMenu menuPopup = new JPopupMenu(); 

    public Formatka() { 
     this.add(new JLabel("Right-click for popup menu.")); 
     menuPopup.add(klienciMenuItem); 
     this.setComponentPopupMenu(menuPopup); 
    } 

    private void display() { 
     JFrame f = new JFrame("Formatka"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.add(this); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new Formatka().display(); 
      } 
     }); 
    } 
} 
+0

谢谢,你解决了我的问题。这不是因为我将Button添加到我的JPanel中,当我在代码中删除它时,所有的作品都是如此。谢谢 – user1304098

+0

+1发布SSCCE – mKorbel

2

您没有设置布局,因此该组件可能未添加到JFrame中。使用setLayout(new BorderLayout());将布局设置为JFrame。

+0

打我吧+1 – fireshadow52

+0

我拥有它,只分享我的部分代码。 – user1304098

+0

这条线很重要,我们无法猜测你是否放下了它。 – Hidde

1

这适用于JFrame中:d

import java.awt.event.MouseAdapter; 
    import java.awt.event.MouseEvent; 
    import java.awt.event.MouseListener; 
    import javax.swing.JMenuItem; 
    import javax.swing.JPopupMenu; 
    import javax.swing.JFrame; 

    public class Popup extends JFrame{ 
     JMenuItem item1,item2; 
     static JPopupMenu pop; 

     Popup(){ 
      item1= new JMenuItem("This is Menu Item"); 
      item2= new JMenuItem("This is another Menu Item"); 

      pop= new JPopupMenu(); 

      MouseListener popListener = new PopupListener(); 

      pop.add(item1); 
      pop.add(item2); 

      addMouseListener(popListener);   

      setLocationRelativeTo(null); 
      pack(); 
      setVisible(true); 
    } 

     public static void main(String a []){ 
      new Popup(); 
     } 

    } 

    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.pop.show(e.getComponent(), 
        e.getX(), e.getY()); 
     } 
     } 

    } 
+1

但你不应该这样做,至少不是没有一个很好的理由;-)一般的规则是总是使用最高的抽象可用,这里是setComponentPopup。 – kleopatra

+0

是啊你是对的:D,但我把JFrame的代码,如果任何人想要它.. – Harsha