2012-04-04 33 views
2

我加聽衆對我Jbutton將在彈出菜單,但彈出菜單出現時,這些Jbutton消失,我需要我的懸停的按鈕光標,使他們再次出現後。這是爲什麼?Jbutton將消失在彈出菜單中顯示

(這裏所有的方法都是在同一個班)

public Inventory() { 
    setLayout(null); 
    setBounds(0, 0, 175, 210); 

    initPopupMenu(); // this just sets what is inside the popup menu 
    int x; 
      // 30 buttons 
    for(x = 0; x < 30; x++) { 
     button[x] = new JButton(); 
     add(button[x]); 
     button[x].addMouseListener(this); 
    } 

    x = 0; 
      // it's a grid of buttons 
    for(int i = 0; i < 5; i++) 
     for(int j = 0; j < 6; j++) { 
      button[x].setBounds(i*35+1,j*35+1, 33,33); 
      x++; 
     } 


} 

public void mouseClicked(MouseEvent e) { 
    for(int j = 0; j < 30; j++) // i tried this one but it still disappears 
     button[j].repaint(); 

    for(int i = 0; i < 30; i++) { 
     if(e.getSource() == button[i]) { 
      System.out.println("You pressed Button "+i); 
      popup.show(e.getComponent(), e.getX(), e.getY()); 
     } 

    } 

} 

這是什麼情況,使用jbuttons popup

+0

如果你發佈一些代碼,包括這將是有益的你如何創建按鈕和菜單。菜單是隱藏按鈕,還是隻是「消失」? – 2012-04-04 07:43:00

+1

*「這是爲什麼?」*由於使用的代碼。爲了更快地獲得更好的幫助,請發佈[SSCCE](http://sscce.org/)。 – 2012-04-04 07:45:22

+0

您可以添加一些代碼,以便我們能夠理解錯誤。 – mbaydar 2012-04-04 07:50:54

回答

3

停止null佈局,似乎可以是關於這個問題的一個。你JFrame似乎有點BLACK對我來說,這是一些THEME或新LOOK AND FEEL您使用的,可以是這東西的原因了。這裏檢查了這一點,它的工作完美無缺這裏與此代碼:

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class ButtonPopUp 
{ 
    private static final int SIZE = 30; 
    private JButton[] button = new JButton[SIZE]; 
    private JPopupMenu popup = new JPopupMenu("Hello World"); 

    private void createAndDisplayGUI() 
    { 
     JFrame frame = new JFrame("Button POP UP Example"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.setLocationByPlatform(true); 

     final JPanel contentPane = new JPanel(); 
     contentPane.setLayout(new GridLayout(0, 5)); 

     JMenuItem menuItem1 = new JMenuItem("Menu Item 1"); 
     JMenuItem menuItem2 = new JMenuItem("Menu Item 2"); 
     //popup.add(greetings); 
     popup.insert(menuItem1, 0); 
     popup.insert(menuItem2, 1); 

     for (int i = 0; i < SIZE; i++) 
     { 
      button[i] = new JButton(); 
      button[i].setBorder(BorderFactory.createEtchedBorder()); 
      button[i].addMouseListener(new MouseAdapter() 
      { 
       public void mouseClicked(MouseEvent me) 
       { 
        System.out.println("I am WORKING!!"); 
        popup.show((JComponent)me.getSource(), me.getX(), me.getY()); 
       } 
      }); 
      contentPane.add(button[i]); 
     } 

     frame.getContentPane().add(contentPane); 
     frame.setSize(175, 250); 
     frame.setVisible(true); 
    } 

    public static void main(String... args) 
    { 
     SwingUtilities.invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       new ButtonPopUp().createAndDisplayGUI(); 
      } 
     }); 
    } 
} 

這裏是輸出:

Before EventAfter Event

+0

+1 corrent答案,'null'佈局是邪惡的。 – Stephan 2012-04-04 11:01:08

+0

@Stephan:三江源和保持微笑:-),那'LnF'可以是另一個罪魁禍首:( – 2012-04-04 11:03:03

+0

這將變得更漂亮,更動態的,如果你使用'JTable'與定製單元;-) – Stephan 2012-04-04 11:05:07