JComboBox und MouseListener

Status
Nicht offen für weitere Antworten.

The_S

Top Contributor
Hi,

ich stehe gerade vor einem - für mich nicht nachvollziehbaren - Problem. Und zwar habe ich eine Klasse, die von JFrame abgeleitet ist. In dieser Klasse generiere ich dynamisch - je nach Übergabeparameter im Konstruktor - mehrere JComboBoxen und befülle diese. Die Anzeige der Maske funktioniert auch soweit ohne Probleme, aber irgendwie reagieren die Boxen nicht auf meinen MouseListener.

Code:
public class Navi extends JFrame {
	
	private final static long serialVersionUID = 1L;
	
	private Blase blase = null;
	private JPanel pane = null;
	private JPanel buttons = null;
	private JLabel pic = null;
	private JComboBox[] boxes = null;
	private String[] texte = null;
	
	public Navi(Image picture, HashMap<String, String[]> box, int buttX, int buttY) {
		
		blase = new Blase("");
		pane = new JPanel();
		buttons = new JPanel();
		pic = new JLabel(new ImageIcon(picture));
		
		ArrayList<String> key = new ArrayList<String>(box.keySet());
		String[] elements = null;
		
		boxes = new JComboBox[key.size()];
		
		pane.setLayout(new BorderLayout());
		buttons.setLayout(new GridLayout(buttY, buttX, 3, 3));

		for (int i = 0; i < key.size(); i++) {
			elements = box.get(key.get(i));
			boxes[i] = new JComboBox(elements);
			boxes[i].setName(key.get(i));
			boxes[i].addMouseListener(mou);
			buttons.add(boxes[i]);
		}
		
		pane.add(blase);
		pane.add(pic, BorderLayout.WEST);
		pane.add(buttons, BorderLayout.SOUTH);
		
		setContentPane(pane);
	}
	
	private MouseAdapter mou = new MouseAdapter() {
		
		public void mouseEntered(MouseEvent mou) {
			System.out.println("ent");
			for (int i = 0; i < texte.length; i++) {
				if (mou.getSource() == boxes[i]) {
					blase.setText(texte[i]);
					break;
				}
			}
		}
		
		public void mouseExited(MouseEvent mou) {
			System.out.println("ext");
			blase.setText(texte[texte.length - 1]);
		}
	};
	
	public void setTexte(String[] texte) {
		this.texte = texte;
		blase.setText(texte[texte.length - 1]);
	}
}

ent bzw. ext wird nie ausgegeben. Ich dachte, dass evtl. dabei ein generelles Problem vorliegt, aber zu meiner Überraschung funktionierte dieses KSKB

Code:
public class Blub {

	public static void main(String[] args) {
		JFrame frame = new JFrame();
		JComboBox box = new JComboBox();
		box.addItem("Blob");
		box.addItem("Blub");
		box.addMouseListener(new MouseAdapter() {
			public void mouseEntered(MouseEvent mou) {
				System.out.println("blob");
			}
		});
		frame.add(box);
		frame.setSize(200, 300);
		frame.setVisible(true);
	}
}

ohne Probleme. Weiß jemand woran das liegen könnte?

Danke!
 

kleiner_held

Top Contributor
Hmm also bei mir funktioniert es. Ich habe zwar Deinen Code ein wenig veraendern muessen (Klasse Blase fehlte ...) aber grundsaetzlich sollte es funktionieren.
 

The_S

Top Contributor
tuts aber nicht :cry: . Hab jetzt auch mal die "Blase" Klasse auf blöd rausgeworfen, ändert aber (wie zu erwarten) nichts daran. Kannst du mal deine Abänderung posten?
 

The_S

Top Contributor
Gerade mal ausprobiert, wenn ich den MouseAdapter einer anderen Componente (z. B. der "blase" oder dem Picture-Label) zuordne, springt der MouseListener an. Bei den Boxen aber immernoch nicht ???:L
 

kleiner_held

Top Contributor
Ich hatte eine eigen "Blase" von JLabel erbend erstellt, eine main Methode eingebaut und das Image mit einem String ersetzt:

Code:
public class Navi extends JFrame {
   
   private final static long serialVersionUID = 1L;
   
   private Blase blase = null;
   private JPanel pane = null;
   private JPanel buttons = null;
   private JLabel pic = null;
   private JComboBox[] boxes = null;
   private String[] texte = null;
   
   public static void main(String[] args)
   {
	   HashMap<String, String[]> map = new HashMap<String, String[]> ();
	   map.put("eines", new String[] {"eins1", "eins2"});
	   map.put("zwo", new String[] {"zwo1", "zwo2"});
	   map.put("drei", new String[] {"drei1", "drei2"});
	   map.put("vier", new String[] {"vier1", "vier2"});
	   Navi navi = new Navi("Pic", map, 2, 2);
	   navi.pack();
	   navi.setVisible(true);
   }
   
   
   public Navi(String picture, HashMap<String, String[]> box, int buttX, int buttY) {
      
      blase = new Blase("");
      pane = new JPanel();
      buttons = new JPanel();
      pic = new JLabel(picture);
      
      ArrayList<String> key = new ArrayList<String>(box.keySet());
      String[] elements = null;
      
      boxes = new JComboBox[key.size()];
      
      pane.setLayout(new BorderLayout());
      buttons.setLayout(new GridLayout(buttY, buttX, 3, 3));

      for (int i = 0; i < key.size(); i++) {
         elements = box.get(key.get(i));
         boxes[i] = new JComboBox(elements);
         boxes[i].setName(key.get(i));
         boxes[i].addMouseListener(mou);
         buttons.add(boxes[i]);
      }
      
      pane.add(blase);
      pane.add(pic, BorderLayout.WEST);
      pane.add(buttons, BorderLayout.SOUTH);
      
      setContentPane(pane);
   }
   
   private MouseAdapter mou = new MouseAdapter() {      
      public void mouseEntered(MouseEvent mou) {
         System.out.println("ent " + ((JComponent) mou.getSource()).getName());
      }
      
      public void mouseExited(MouseEvent mou) {
         System.out.println("ext " + ((JComponent) mou.getSource()).getName());
      }
   };
   
   public void setTexte(String[] texte) {
      this.texte = texte;
      blase.setText(texte[texte.length - 1]);
   }
   
   private class Blase extends JLabel
   {
	   public Blase(String text)
	   {
		   super(text);
	   }
   }
}
 

The_S

Top Contributor
jop, funktioniert einwandfrei ... aber ist komisch, gibt ja eigentlich keinen wirklichen unterschied! *weiter informiert*
 

The_S

Top Contributor
Gut, Problem gefunden, aber bei weitem nicht behoben! Ich verwende ein PlasticXP LaF von jgoodies.com . Wenn ich es nicht verwende funktionierts, wenn ich es verwende aber nicht ...
 

The_S

Top Contributor
Ohne seperates LookAndFeel springt der Listener auch nur an, wenn die Maus direkt über dem Editier-Feld ist. Über den "Nach-Unten"-Button werden die Aktionen auch ohne extra LaF ignoriert. Daraus schließe ich mal (was auch das Äußere der JComboBox vermuten lässt), dass diese Editor-Componente im JGoodies LaF fehlt und statt dessen nur ein Button verwendet wird. Ich müsste jetzt also irgendwie an den Button kommen und diesem den MouseListener adden ...
 

kleiner_held

Top Contributor
Das Problem ist halt, dass eine JComboBox als zusammengesetzte JComponent je nach Look-and-Feel andere Komponenten enthaelt und damit die sogenannten LowLevelEvents nicht immer richtig funtionieren.
Siehe auch:
http://java.sun.com/docs/books/tutorial/uiswing/components/combobox.html#listeners

Folgende "Loesung" wuerde ich mal als quick-and-dirty Hack anbieten (laeft unter Metal L&F):
Code:
for (Component c : boxes[i].getComponents())
{
    if (c instanceof JButton)
    {
        c.setName(key.get(i));
        c.addMouseListener(mou);
    }
}
 

The_S

Top Contributor
jo, so hab ich mir das auch überlegt, falls noch wer ne "saubere" Methode kennt, bitte posten ;) .
 

André Uhres

Top Contributor
Mit einer editierbaren box müsste es so gehen:
Code:
     box.setEditable(true);
      box.getEditor().getEditorComponent().addMouseListener(new MouseAdapter() {
         public void mouseEntered(MouseEvent mou) {
            System.out.println("blob");
         }
      });
 

The_S

Top Contributor
Hi André,

wusste ich doch, dass du dich mit sowas auskennst :D . Danke erstmal, aber meine Boxen sind nie Editierbar ;) .
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B MouseListener im Renderer einer JComboBox AWT, Swing, JavaFX & SWT 3
P JComboBox und MouseListener AWT, Swing, JavaFX & SWT 2
H JComboBox reagiert nicht auf MouseListener AWT, Swing, JavaFX & SWT 5
S JComboBox und MouseListener AWT, Swing, JavaFX & SWT 5
hannibalstgt Fehler bei JCOMBOBOX GUI Anzeige AWT, Swing, JavaFX & SWT 4
L jComboBox Actionlistener wird beim erstmaligen Befüllen getriggert AWT, Swing, JavaFX & SWT 7
N Keylistener & JComboBox AWT, Swing, JavaFX & SWT 5
R JComboBox abfragen AWT, Swing, JavaFX & SWT 1
Esquid If Befehl bei JComboBox AWT, Swing, JavaFX & SWT 3
kodela Swing Element einer JComboBox ausgrauen AWT, Swing, JavaFX & SWT 3
D JComboBox Strings aus JTextFields zuordnen AWT, Swing, JavaFX & SWT 2
F JComboBox und Model AWT, Swing, JavaFX & SWT 10
I Editierbare JComboBox, die nur Ganzzahlen als Eingabewerte zulässt AWT, Swing, JavaFX & SWT 3
Drachenbauer Swing Wie ändere ich die Farbe der Konturen von jButton und jCombobox? AWT, Swing, JavaFX & SWT 18
Drachenbauer Swing Wie ändere ich den Hintergrund vom Anzeigefeld einer JComboBox, die nicht zum Hineinschreiben offen steht? AWT, Swing, JavaFX & SWT 32
Hatsi09 JCombobox default wert AWT, Swing, JavaFX & SWT 6
D Swing JCombobox Aktion löscht Grafik AWT, Swing, JavaFX & SWT 1
cezary Choice, JComboBox oder JList AWT, Swing, JavaFX & SWT 5
R Swing Java9 NullPointerException bei JComboBox AWT, Swing, JavaFX & SWT 13
ralfb1105 Swing JComboBox update der Daten AWT, Swing, JavaFX & SWT 8
D Swing JCombobox Weiße Leerzeilen AWT, Swing, JavaFX & SWT 10
G JComboBox: Arrow-Button permanent anzeigen AWT, Swing, JavaFX & SWT 4
D Swing Java JComboBox Example AWT, Swing, JavaFX & SWT 16
K Swing JComboBox mit ArrayList füllen AWT, Swing, JavaFX & SWT 4
D Swing "blaues" Element aus JComboBox erhalten AWT, Swing, JavaFX & SWT 6
F JComboBox und Einträge AWT, Swing, JavaFX & SWT 3
gamillton Swing JComboBox mit extra Inhalt + breiteres Popupmenü AWT, Swing, JavaFX & SWT 0
T JPanelsteuerung mit JComboBox AWT, Swing, JavaFX & SWT 5
N Swing Duplikate im Jcombobox vermeiden AWT, Swing, JavaFX & SWT 15
L Swing JComboBox kann nicht erstellt werden! AWT, Swing, JavaFX & SWT 2
C JComboBox Objecte übergeben und Eintrag auswählen AWT, Swing, JavaFX & SWT 3
M Swing JComboBox mit Laufwerksbuchstaben (Windows) AWT, Swing, JavaFX & SWT 6
D Swing Größe einer JComboBox im GridBagLayout aufgrund der maximalen Länge der enthaltenen Daten AWT, Swing, JavaFX & SWT 7
D Swing JComboBox (DefaultComboBoxModel) überschreibt Eintrag beim erstellen AWT, Swing, JavaFX & SWT 0
R Swing Durch JComboBox-Item eine TextArea aktualisieren AWT, Swing, JavaFX & SWT 2
3 JComboBox - Action - Auslesen & Umwandeln AWT, Swing, JavaFX & SWT 9
M Alle Schriftarten in JComboBox AWT, Swing, JavaFX & SWT 5
M Swing JComboBox eigenes Design AWT, Swing, JavaFX & SWT 3
Sin137 JComboBox mit Generics AWT, Swing, JavaFX & SWT 14
R JComboBox erweitern AWT, Swing, JavaFX & SWT 5
S Swing Eigene JComboBox Problem! AWT, Swing, JavaFX & SWT 1
V Editierbare JComboBox AWT, Swing, JavaFX & SWT 2
D Swing JCombobox in einem JTable vorbelegen AWT, Swing, JavaFX & SWT 4
F neuen Menüpunkt in jcombobox einfügen AWT, Swing, JavaFX & SWT 1
F Swing Jcombobox mit manueller Rückgabe AWT, Swing, JavaFX & SWT 4
W JComboBox auffristen nach Listenänderung AWT, Swing, JavaFX & SWT 20
S JComboBox mit mehreren Spalten? AWT, Swing, JavaFX & SWT 6
J JComboBox + ItemListener AWT, Swing, JavaFX & SWT 12
T Swing jComboBox auslesen mit Datenbankanbindung AWT, Swing, JavaFX & SWT 3
S JComboBox aus anderer Klasse füllen (Java-Swing) AWT, Swing, JavaFX & SWT 0
D Swing Erstes Item einer JCombobox in JTable anzeigen AWT, Swing, JavaFX & SWT 2
N JComboBox in JTable [Swing] -> totaler UI-Einsteiger AWT, Swing, JavaFX & SWT 3
H Swing jComboBox Ausgabe -1/null AWT, Swing, JavaFX & SWT 4
C Arrow Farbe bei JComboBox AWT, Swing, JavaFX & SWT 2
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
O JTextfield und JComboBox Wert in SQL Database speichern AWT, Swing, JavaFX & SWT 4
S JComboBox UTF-8 Codierung zuweisen AWT, Swing, JavaFX & SWT 5
A JComboBox mit Array aktualisieren AWT, Swing, JavaFX & SWT 7
S JComboBox nach auswahl erneuern AWT, Swing, JavaFX & SWT 4
S Swing JComboBox mit Listener aktualisieren AWT, Swing, JavaFX & SWT 13
A Swing per JComboBox gewünschtes Attribut auswählen und Komponenten passen sich an AWT, Swing, JavaFX & SWT 7
I JComboBox gibt bei ausgewählten ITem NullPointer an... AWT, Swing, JavaFX & SWT 3
D Swing JCombobox - Tooltip Location ändern AWT, Swing, JavaFX & SWT 4
J JComboBox Dropdown Icon AWT, Swing, JavaFX & SWT 2
M Swing Mix JComboBox - JButton? AWT, Swing, JavaFX & SWT 6
A Swing bei Auswahl und klick eines JComboBox buttons die Klasse eines anderen Projekts aufrufen AWT, Swing, JavaFX & SWT 3
F Swing jComboBox auslesen AWT, Swing, JavaFX & SWT 6
O Swing TableCellRenderer und JComboBox AWT, Swing, JavaFX & SWT 4
F Swing JComboBox - Frage zur Größe AWT, Swing, JavaFX & SWT 11
C Swing JComboBox, ItemListener gibt 2x aus AWT, Swing, JavaFX & SWT 2
O JComboBox - autom. Selektieren AWT, Swing, JavaFX & SWT 6
J JComboBox - wie getSelectedItem() überschreiben? AWT, Swing, JavaFX & SWT 8
S Swing Jcombobox und array AWT, Swing, JavaFX & SWT 6
D Swing JComboBox aktualisieren AWT, Swing, JavaFX & SWT 4
E JComboBox AWT, Swing, JavaFX & SWT 8
N Swing JComboBox Frage AWT, Swing, JavaFX & SWT 5
S Swing Bild auf jPanel nach Änderung von JComboBox zeichnen AWT, Swing, JavaFX & SWT 4
H Swing Element aus JComboBox auswählen AWT, Swing, JavaFX & SWT 2
H JCombobox inhalt löschen AWT, Swing, JavaFX & SWT 17
N Swing JCombobox - PopupMenu-Inhalt mit KSKB AWT, Swing, JavaFX & SWT 2
O JComboBox mit ArrayList füllen AWT, Swing, JavaFX & SWT 3
S Swing JComboBox mit Datenbank füllen AWT, Swing, JavaFX & SWT 16
S Inhalt einer JComboBox aktualisieren AWT, Swing, JavaFX & SWT 6
F Swing JComboBox in JTable AutoComplete + Tab AWT, Swing, JavaFX & SWT 4
O JComboBox getSelectedItem AWT, Swing, JavaFX & SWT 4
M JComboBox Hintergrundfarbe des gewählten Items AWT, Swing, JavaFX & SWT 3
B Swing Problem: Horizontaler Scrollbalken in JComboBox hinzufügen AWT, Swing, JavaFX & SWT 4
M JCombobox mit ID und Text AWT, Swing, JavaFX & SWT 4
A JComboBox-Inhalt durch neues Array ersetzen AWT, Swing, JavaFX & SWT 2
C Swing Dynamische JComboBox (Filter) AWT, Swing, JavaFX & SWT 28
M JComboBox Item-Auswahl in JTable AWT, Swing, JavaFX & SWT 2
L Jbutton + jcombobox mit vorhandenen frame verknüfen AWT, Swing, JavaFX & SWT 8
D JCombobox mit Linien Styles AWT, Swing, JavaFX & SWT 4
H Unterschiedliche JComboBox je JTable Zeile AWT, Swing, JavaFX & SWT 4
B jCombobox addItem funktioniert nicht AWT, Swing, JavaFX & SWT 9
G JComboBox mit CellRenderer (Auswahl) AWT, Swing, JavaFX & SWT 11
G Swing JComboBox anpassen AWT, Swing, JavaFX & SWT 6
M Item in JComboBox umbenennen AWT, Swing, JavaFX & SWT 5
M Swing Busy Waiting Problem (JComboBox) AWT, Swing, JavaFX & SWT 11
C JComboBox Renderer Problem AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen

Neue Themen


Oben