2011-07-02 20 views
6

Estoy tratando de usar un componente Swing compuesto como parte de un menú.JComboBox en un JPopupMenu

Todo funciona bien, aparte de un detalle: El componente contiene JComboBox es y cada vez que el usuario hace clic en uno de ellos para abrir su menú desplegable, se abre el menú desplegable pero el menú desaparece. ¿Es posible hacer que el menú permanezca abierto cuando se hace clic en JComboBox?

Subclasificado JMenu. Este es el código correspondiente:

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 es el componente compuesto personalizado. Se llama al pm.pack() para adaptar el tamaño de JPopupMenu cuando el tamaño filterPanel cambia.

Gracias por su ayuda

+1

¿No sería más apropiado un submenú que un JComboBox? –

+0

@Max estuvo de acuerdo con @Jesse Barnum subMenuItem +1 – mKorbel

Respuesta

2

son que significa 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

mirada a Jide OSS' PopupWindow. Esto proporciona una solución fácil de usar para este problema. Funciona bien para mí

Javadoc es here.