PopupMenu öffnet nicht so wie ich möchte

Status
Nicht offen für weitere Antworten.

Eminent

Bekanntes Mitglied
Hi,

nachdem ich jetzt nach gestern den ganzen Tag heute schon wieder 2 Stunden vor dem Problem sitze, hisse ich die weiße Flagge und frag hier mal nach, vielleicht hat ja jemand n Tip für mich.

Also Sache ist die, ich möchte mir einen Suchdialog machen. Das MainPanel des Dialoges hat BorderLayout und soll oben (NORTH) drei Suchfelder in einem Rahmen haben:

Code:
   private SKGridBagPanel createSearchPanel() {
      SKGridBagPanel p = new SKGridBagPanel();
      p.placeWest("Datum (TT.MM.JJJJ): ", 0, 0);
      p.placeEast(new SKTextField(new SKDate().getFormatedDate(), 10), 1, 0);
      try {
         SKCatalogField cf = new SKCatalogField(SKCatalogFactory.CATALOG_HHP_KENNBEGRIFF, true);
         cf.getCatalog().getInnerValues().add(0, "*");
         cf.getCatalog().getOuterValues().add(0, "Egal");    
         cf.setValue("*");
         p.placeEast(cf, 1, 1);
         p.placeWest("Kennbegriff: ", 0, 1);
      } catch (SQLException e) { }
      p.placeWest("Beschreibung: ", 0, 2);
      p.placeEast(new SKTextField(20), 1, 2);
      p.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5),
         BorderFactory.createEtchedBorder()));
      return p;
   }

Zentriert soll dann eine Tabelle mit den Suchergebnissen angezeigt werden. Die Tabelle soll dann in einer JScrollPane liegen um ggf. automatisch mit Scrollleisten versorgt zu werden:

Code:
   private JPanel createResultPanel() {
      JPanel p = new JPanel();
      _table = new JTable(new MyTableModel());
      p.add(new JScrollPane(_table));
      return p;
   }

Diese beiden Panels sollen jetzt auf mein MainPanel im Suchdialog:

Code:
   protected JPanel createMainPanel() {
      JPanel p = new JPanel();
      p.setLayout(new BorderLayout());
      p.add(createSearchPanel(), BorderLayout.NORTH);
      p.add(createResultPanel(), BorderLayout.CENTER);
      return p;
   }

Eigentlich also nichts schlimmes finde ich.

Problem ist jetzt das SKCatalogField aus dem SearchPanel. Es ist eine Art JComboBox und zeigt bei einem Klick darauf normal ein JPopupMenu an, aus dem der Anwender einen Wert auswählen kann. Nur leider kommt dieses PopupMenü nicht wenn ich die Komponenten so anordne. Wenn ich die Anordnung ändere und das SearchPanel auf CENTER setze (ResultPanel dann auf NORTH) wird mir das PopupMenü angezeigt. So bald aber mein SearchPanel in irgend einer Art überhalb des ResultPanel liegt funktioniert die Anzeige des PopupMenüs nicht mehr.

Hat einer von euch zufällig ne Ahnung wo hier mein Problem liegen könnte?

Vielen Dank schon mal für eur Mühen.

Gruß
Eminent
 
Solche Probleme treten häufig auf, wenn man Swing und AWT mischt. Das sollte man i.a. nicht tun, aber wenn man es tut, kann es helfen, am Anfang (z.B. in der main) einmal
JPupupMenu.setDefaultLeightweightPopupEnabled(false);
aufzurufen.... Ansonsten würde ein bißchen (am besten compilierbarer) Code vielleicht helfen - und ggf. schon die Frage beantworten, was denn "eine Art JComboBox" sein soll.....
 
Hi,

also erstmal vielen Dank für die Antwort, dass mit

Code:
JPopupMenu.setDefaultLightWeightPopupEnabled(false);

funktioniert. Allerdings habe ich eigentlich darauf geachtet nur Swing zu verwenden und wüsste nicht wo ich AWT verwende. Wenn das der Fall ist, dann unbewusst.

Mehr Code könnte ich schon posten allerdings wäre dieser so einfach nicht kompilierbar da ich nicht unbedingt zigtausend Zeilen Code posten möchte der alle notwendigen, von uns selbst erstellen, Klassen enthält um das Ganze ablauffähig zu machen.

Noch kurz zur Erklärung. Die "Art" JComboBox sollte nur grob die Funktionsweise beschreiben was das Feld macht (Bei Userklick Dropdown mit Auswahlmöglichkeiten). Genau genommen ist ein SKCatalogField ein JPanel das mehrere Komponenten beinhaltet. Ein JTextField für die Anzeige des Katalogkeys, ein JLabel mit einem kleinen Bild das auf Mausklick reagiert und das JPopupMenu anzeigt und ein JLabel das den zum Katalogkey gehörigen Wert anzeigt. Die Datenhalten des SKCatalogFields erfolgt in einem SKCatalog-Objekt. SKCatalog bietet grundsätzlich die gleichen Möglichkeiten wie eine HashMap nur mit besonderen für uns notwendige Funktionen zusätzlich.

Gruß
Eminent
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben