2011-07-02 11 views
6

Próbuję użyć złożonego elementu Swing jako części menu.JComboBox na JPopupMenu

Wszystko działa dobrze, z wyjątkiem jednego szczegółu: komponent zawiera JComboBox es i ilekroć użytkownik kliknie na jedno z nich, aby otworzyć jego menu rozwijane, menu otwiera się, ale menu znika. Czy można otworzyć menu po kliknięciu przycisku JComboBox?

Podkategorię JMenu. Jest to odpowiedni kod:

public class FilterMenu extends JMenu { 

    public FilterMenu(String name) { 
     super(name); 

     final JPopupMenu pm = this.getPopupMenu(); 
     final FilterPanel filterPanel = new FilterPanel(pm) { 
      @Override 
      public void updateTree() { 
       super.updateTree(); 
       pm.pack(); 
      } 
     }; 
     pm.add(filterPanel); 
    } 
} 

FilterPanel jest niestandardowy składnik związku. Model pm.pack() jest wywoływany w celu dostosowania rozmiaru JPopupMenu, gdy zmienia się rozmiar filterPanel.

Dzięki za pomoc

+1

Czy podmenu nie byłoby bardziej odpowiednie niż JComboBox? –

+0

@Max uzgodnione z @Jesse Barnum subMenuItem +1 – mKorbel

Odpowiedz

2

jesteś oznacza this bug

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

public class Test { 

    public static void main(String[] args) { 
     JFrame frame = new JFrame(); 
     frame.setSize(400, 400); 
     frame.setVisible(true); 
     String[] list = {"1", "2", "3", "4",}; 
     JComboBox comb = new JComboBox(list); 
     final JPopupMenu pop = new JPopupMenu(); 
     pop.add(comb); 
     frame.addMouseListener(new MouseAdapter() { 

      @Override 
      public void mousePressed(MouseEvent e) { 
       System.out.println("mousePressed"); 
       pop.show(e.getComponent(), e.getX(), e.getY()); 
      } 
     }); 
    } 
} 
1

Spójrz Jide OSS”PopupWindow. Zapewnia to łatwe w użyciu rozwiązanie tego problemu. Działa dobrze dla mnie.

Javadoc to here.