Schließen von JPopupMenu

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hi
Ich habe ein JPopupMenu, welches ich gerne schliessen möchte. Ich habe es mit setVisible(false) versucht, aber es klappte irgendwie nicht. Kann mir da wohl jemand weiterhelfe? Danke im Voraus!
 
Anonymous hat gesagt.:
...Ich habe ein JPopupMenu, welches ich gerne schliessen möchte...
Wie machst du das JPopupMenu sichtbar?
Normalerweise geht das ja mit einem Rechtsklick auf eine Komponente, z.B. auf eine JTextArea.
Ein MouseListener macht das dann mit popup.show(..) sichtbar.
Es verschwindet automatisch wenn du einen Menüpunkt auswählst,
oder wenn du neben das popup klickst, oder wenn du die Escape-Taste drückst.
http://java.sun.com/docs/books/tutorial/uiswing/components/example-1dot4/PopupMenuDemo.java
Gruß
André
 
probiers mal so

Code:
addMouseListener( new MouseAdapter() {
      public void mouseReleased( MouseEvent me ) {
        if(me.isPopupTrigger() )
          popman.show(me.getComponent(), me.getX(), me.getY());
      }
    });

popman ist das JPopMenu...
 
Liest sich eigentlich irgendwer die Frage auch noch durch??


Er möchte es einfach, schließen und net wenn es automatisch zugehen sollte und auch net wie man es anzeigt....

Probier mal

JPopupMenu.menuSelectionChanged(false);

Bei mir wars dann weg! (es verschwand aber auch mit setVisible(false))
 
thE_29 hat gesagt.:
Liest sich eigentlich irgendwer die Frage auch noch durch??..
Ja doch. Aber da Otto Normalverbraucher sich um's Popupschliessen nicht kümmern müssen sollte,
ist die Ursache des Problems höchstwahrscheinlich das eigentliche Problem.
In dem Fall wäre ein direkter Lösungversuch eigentlich nur Flickarbeit.
 
Hi,

aus mir bekannten Anwendungen kenne ich das nur so wie von André beschrieben. Und soll in bestimmten Fällen kein Popup-Menü erscheinen verhindere ich das explizit für den Fall.

Alles andere macht doch irgendwie keinen Sinn, oder? Und wie man anständige GUIs baut steht hier: Java Look and Feel Design Guidelines

Caffè Latte
 
Ich habe ein ähnliches Problem:

Ich habe ein JTextField,dass per Mausklick ein JPopMenu erzeugt und öffnet (Show Befehl).Der Inhalt des Popups ist abhängig von einen anderen JtextField.Das Schließen des Popups mit setVisible(false) klappt auch,aber wenn ich jetzt ein zweites mal das Popup öffne erscheint immer noch das alte.Gibt es nicht einen Weg ähnlich wie mit dispose() ein Popup ganz "zu zerstören" ?
 
PopupMenu's öffnet man nicht (mehr) per MouseListener. Dann funktioniert nämlich die hübsche Taste auf der Tastatur nicht. Daher besser:
Java:
textField.setComponentPopupMenu(aPopupMenu)
Wenn das Popupmenü unterschiedlichen dynamischen Inhalt haben soll, kann man das mit einem Listener auf dem PopupMenu lösen.

Kleines Beispiel:
Java:
final JPopupMenu menu = new JPopupMenu();
menu.addPopupMenuListener(new PopupMenuListener() {

  int test = 0;

  public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
    menu.removeAll();
    if ((test++ % 2) == 0) {
      menu.add(new JMenuItem("A"));
    } else {
      menu.add(new JMenuItem("B"));
    }
  }

  public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {}

  public void popupMenuCanceled(PopupMenuEvent e) {}
});
final JTextField textField = new JTextField(40);
textField.setComponentPopupMenu(menu);

final JFrame f = new JFrame("Test Frame: GridBagTest"); //$NON-NLS-1$
f.setContentPane(textField);
f.pack();
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.setVisible(true);
Ebenius
 
Ich hab im meinen JPopUpmenu keine Menuitems drin sondern andere Komponenten,nämlich eine JTable und ein JPanel.LEider funktioniert es nicht

eigentlich bräuchte ich auch nur ein Popup aber bei der Popup Klasse von Swing wusste ich nicht wie man Hintergrundfarbe oder ähnliches einstellt oder überhaupt einstellen kann.
 
Eine JTable im PopupMenu... Das hab ich auch noch nicht gesehen.

Kleines Beispiel, wie man die PopupFactory benutzt:
Java:
/* (@)PopupFun.java */

/* Copyright 2009 Sebastian Haufe

 * Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       [url]http://www.apache.org/licenses/LICENSE-2.0[/url]

 * Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License. */

package com.ebenius.swing;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

/**
 * Test class for {@link PopupFactory} usage.
 * 
 * @author Sebastian Haufe
 */
public class PopupFun {

  /**
   * Test main method.
   * 
   * @param args ignored
   */
  public static void main(String[] args) {

    final JButton button = new JButton(new AbstractAction("Popup") {

      public void actionPerformed(ActionEvent e) {
        final JScrollPane scrollPane = new JScrollPane(new JTable(7, 2));
        scrollPane.getViewport().setBackground(Color.GREEN);
        final Point p = MouseInfo.getPointerInfo().getLocation();
        final PopupFactory pfac = PopupFactory.getSharedInstance();
        final Popup popup =
              pfac.getPopup((Component) e.getSource(), scrollPane, p.x, p.y);
        popup.show();
        final Timer timer = new Timer(5000, new ActionListener() {

          public void actionPerformed(ActionEvent e) {
            popup.hide();
          }
        });
        timer.setRepeats(false);
        timer.start();
      }
    });

    final JPanel contentPane = new JPanel(new BorderLayout(6, 6));
    contentPane.add(button);

    final JFrame f = new JFrame("Test Frame: PopupFun"); //$NON-NLS-1$
    f.setContentPane(contentPane);
    f.pack();
    f.setLocationRelativeTo(null);
    f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    f.setVisible(true);
  }
}
Ebenius
 
Hmm okay.

Es hat zwar nichts mit den ursprünglichen Thema zu tun ,aber wie bekomm ich es jetzt hin ,dass das Popup die Eigenschaften von JPopMenu bekommt.Das Popup soll verscheinden wenn man auf das ursprüngliche Fenster klickt oder auf eine Zelle der Tabelle.
 
Wenn es sich nicht um ein PopupMenu handelt, dann kannst Du durchaus einen MouseListener nehmen. Wofür ist das Popup denn da?

Ebenius
 
Man soll in dem Popup ein Datum auswählen ,dass in der besagten JTable ist.
Nach der Auswahl soll sich das Popup schließen.Oder wenn man eben auf das Ursprungsfenster klickt.

Ich hab die Kompionente die vorher ein JPopUpMenu war jetzt zu einen JPanel geändert das per Popup geöffnet wird.Auf Msudruck auf die Tablle soll das Panel unsichtbar gesetzt werden(setVisible(false)).Es wird aber zu einer weisen Fläche
 
Steht doch in meinem Quelltext oben: Popups erzeugt man mit der PopupFactory, geschlossen werden sie mit [c]Popup.hide()[/c].

Ebenius
 
Mit
Java:
Popup.hide
passiert leider dasselbe

Edit:Geht doch.
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben