2010-09-21 11 views
9

Voglio utilizzare JCheckBoxMenuItem s in un JPopupMenu. Funziona, ma il problema è che il menu popup scompare quando un elemento della casella di controllo è stato selezionato o deselezionato. Quindi, se uno vuole controllare/deselezionare più elementi, il popup deve essere lanciato ripetutamente, il che è irritante.Come evitare la scomparsa di JPopUpMenu durante il controllo delle caselle di controllo?

Curiosamente, se uso semplicemente JCheckBox voci nel menu (invece di JCheckBoxMenuItem s), il comportamento è proprio come dovrebbe essere: il popup rimane lì e le caselle di controllo può essere controllato/incontrollato. Una volta fatto, il popup può essere chiuso semplicemente cliccando al di fuori di esso.

Come faccio a fare in modo che il popup si comporti in questo modo quando gli articoli sono JCheckBoxMenuItem s? Preferisco usare JCheckBoxMenuItem s a causa del loro aspetto.

+0

Penso che questo sia un bug e dovrebbe essere corretto dagli autori della libreria Swing, piuttosto che evitare l'uso di soluzioni alternative. L'unico problema è che gli sviluppatori di Java preferiscono trovare scuse piuttosto che correggere i loro bug. –

risposta

12

Bene, trovato risposta di lavoro da http://forums.sun.com/thread.jspa?threadID=5432911. In sostanza, creare un'interfaccia utente personalizzata:

public class StayOpenCheckBoxMenuItemUI extends BasicCheckBoxMenuItemUI { 

    @Override 
    protected void doClick(MenuSelectionManager msm) { 
     menuItem.doClick(0); 
    } 

    public static ComponentUI createUI(JComponent c) { 
     return new StayOpenCheckBoxMenuItemUI(); 
    } 
} 

e impostarlo nel JCheckBoxMenuItem:

myJCheckBoxMenuItem.setUI(new StayOpenCheckBoxMenuItemUI()); 

Non so se questa è la soluzione più elegante possibile, ma funziona perfettamente.

+0

"risposta di lavoro" si riferisce al collegamento al forum sole com che è rotto – gnat

+1

Fortunatamente l'ho copiato qui! –

+1

Ulteriori informazioni su questa soluzione sono disponibili qui: http://www.coderanch.com/t/497325/GUI/java/keep-popup-while-clicking-JCheckBoxMenuItem – Steven

3

Ho riscontrato un problema con la bella risposta di Joonas Pulakka perché "UIManager lookandFeel" è stato ignorato.

Ho trovato un trucco elegante in basso a http://tips4java.wordpress.com/2010/09/12/keeping-menus-open/

Il punto è di riaprire immediatamente il menu dopo che è stato chiuso, è invisibile e mantenere l'applicazione look and feel e il comportamento.

Problemi correlati