Wie JPopupMenu verschwindenden bei der Überprüfung Kontrollkästchen in sie verhindern?

StackOverflow https://stackoverflow.com/questions/3759379

  •  04-10-2019
  •  | 
  •  

Frage

Ich möchte JCheckBoxMenuItems in einem JPopupMenu verwenden. Es funktioniert, aber das Problem ist, dass das Popup-Menü verschwindet, wenn ein Checkbox Element aktiviert oder deaktiviert wurde. Also, wenn man will / deaktivieren mehrere Einzelteile überprüfen, um die Popup-Bedarf wiederholt gestartet werden, was reizt.

Seltsamerweise, wenn ich einfach nur JCheckBox Elemente im Menü verwenden (anstelle von JCheckBoxMenuItems) ist das Verhalten so wie es sein soll: die Popup-Aufenthalte dort und die Kontrollkästchen können aktiviert / deaktiviert werden. Ist das erledigt, kann das Popup nur geschlossen werden, indem man außerhalb klicken.

Wie mache ich das Popup wie zu verhalten, dass, wenn die Elemente dort JCheckBoxMenuItems sind? Ich würde es vorziehen JCheckBoxMenuItems wegen ihres Aussehens verwendet wird.

War es hilfreich?

Lösung

Nun, gefunden Antwort Arbeiten von http://forums.sun.com/thread. JSPA? threadID = 5432911 . Grundsätzlich erstellen Sie eine benutzerdefinierte UI:

public class StayOpenCheckBoxMenuItemUI extends BasicCheckBoxMenuItemUI {

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

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

Und legen Sie es in der JCheckBoxMenuItem:

myJCheckBoxMenuItem.setUI(new StayOpenCheckBoxMenuItemUI());

Sie wissen nicht, ob dies die eleganteste mögliche Lösung ist, aber funktioniert perfekt.

Andere Tipps

Ich lief in ein Problem mit dem schönen Joonas Pulakka Antwort, weil die „UIManager LookAndFeel“ ignoriert wurde.

fand ich eine netten Trick unten auf http: // tips4java. wordpress.com/2010/09/12/keeping-menus-open/

Der Punkt ist, sofort das Menü wieder zu öffnen, nachdem sie geschlossen wurde, es ist unsichtbar und halten Sie die Anwendung Erscheinungsbild und Verhalten.

public class StayOpenCBItem extends JCheckBoxMenuItem {

    private static MenuElement[] path;

    {
        getModel().addChangeListener(new ChangeListener() {
            @Override
            public void stateChanged(ChangeEvent e) {
                if (getModel().isArmed() && isShowing()) {
                    path = MenuSelectionManager.defaultManager().getSelectedPath();
                }
            }
        });
    }

    public StayOpenCBItem(String text) {
        super(text);
    }

    @Override
    public void doClick(int pressTime) {
        super.doClick(pressTime);
        MenuSelectionManager.defaultManager().setSelectedPath(path);
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top