MouseListener im editable ComboBox

Status
Nicht offen für weitere Antworten.

weljo

Bekanntes Mitglied
hi Leute hab bereits die problematik mit MouseListener und ComboBox im forum und i-net durchsucht bin jedoch auf kein ergebniss gekommen.

ich will bei einer jComboBox ein Item wählen dann mit rechtsklick ein popupmenü öffnen welches hinzufügen und löschen besitzt um der jComboBox Items zu entfernen oder hinzufügen

das problem ist dass mousePressed ec nicht aktiv werden (der Mouselistener reagiert nicht) ... hab bereits einige sachen im internet darüber gefunden jedoch nichts brauchbares ... laut manken foren liegt dass auch mankmal am l&f worauf ich es mit dem Windows l&f probiert habe. dass funktioniert dann auch nur sehr mangelhaft(funktioniert nur bei einem minimalen teil der combobox im eingabefeld)

kann mir da jemand helfen??
 

Ebenius

Top Contributor
Die Frage ist wo geklickt werden soll. Eine ComboBox besteht aus verschiedenen Teilen. Ist die ComboBox editierbar?

Davon abgesehen kann man das ganze viel einfacher lösen. Seit Java 5 muss man keinen MouseListener mehr bauen, wenn man PopupMenus möchte:
Java:
final Object[] array = { "A", "B", "C" };
final DefaultComboBoxModel model = new DefaultComboBoxModel(array);
final JComboBox comboBox = new JComboBox(model);
comboBox.setPrototypeDisplayValue("...............");
final JPopupMenu menu = new JPopupMenu();
comboBox.setComponentPopupMenu(menu);

menu.add(new AbstractAction("Add Item") {

  public void actionPerformed(ActionEvent e) {
    model.addElement(Character.valueOf((char) ('A' + model.getSize())));
  }
});

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

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

weljo

Bekanntes Mitglied
thx für diese neue methode, aber es bewirkt genau das selbe ... das popup funktioniert nur zwischen dem editierbarem bereich und dem button also nur bei einem minimalen stück sollte aber auch bei dem editierbarem bereich funktionieren
 

Michael...

Top Contributor
Willst Du ein Popupmenü über dem Popup der ComboBox öffnen? Wenn ja, dann ist das ganze nicht so trivial und Du musst Dir da selbst was zusammen basteln.
 

weljo

Bekanntes Mitglied
nein nur über dem selected item ... ist jedoch editierbar

wenn du sagst dass die jComboBox nur aus gewissen komponenten zusammengebaut ist, wie kann ich dann auf die einzelnen komponenten zugrefen ... währe ja auch ein versuch(bzw welche methoden muss ich überschreiben)

@ Ebenius ... muss mich wohl verschaut haben ... aber deine version hab ich bei mir angewendet jedoch bewirkt das garnichts
 
Zuletzt bearbeitet:

Ebenius

Top Contributor
@ Ebenius ... muss mich wohl verschaut haben ... aber deine version hab ich bei mir angewendet jedoch bewirkt das garnichts
Kopier mal meinen Code oben in eine leere
Code:
main()
-Methode und teste damit. Der Code sollte funktionieren. Auch wenn Du in Zeile 4 die ComboBox editierbar machst: [java=4]comboBox.setEditable(true);[/code]

Ebenius
 

weljo

Bekanntes Mitglied
ok ... hmmm was mach ich dann falsch ???? ... hab eine main hinzugefügt damit sich das jemand anschaun kann und den unrelevanten code entfernt.

Java:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JTextPane;
import javax.swing.UIManager;
import javax.swing.WindowConstants;


public class Detail extends javax.swing.JFrame implements ActionListener {
	private JPanel jPanel1;
	private JLabel time;
	private JComboBox jCtemp;
	private JButton cancel;
	private JButton next;
	private JTextPane info;
	private JComboBox jCdilution;
	private JComboBox jCtime;
	private JComboBox jCname;
	private JLabel dilution;
	private JLabel temp;
	private JLabel name;
	private JPopupMenu popup;
	private JMenuItem insert;
	private JMenuItem delete;
	private CBAction cbaction =new CBAction();
	private PopupAction popupaction =new PopupAction();

	public static void main(String[] args) {
		new Detail();
	}
	
	
	public Detail() {
		super();
		initGUI();
		this.setLocationRelativeTo(null);
		this.setVisible(true);
	}
	
	private void initGUI() {
		try {
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
			{
				jPanel1 = new JPanel();
				getContentPane().add(jPanel1, BorderLayout.CENTER);
				jPanel1.setLayout(null);
				{				
					DefaultComboBoxModel model = new DefaultComboBoxModel(new String[]{"a","b","c"});// ist normal ein anderer Vector
					jCname = new JComboBox(model);
					jPanel1.add(jCname);
					jCname.setBounds(53, 72, 86, 24);
					jCname.setEditable(true);
					jCname.setPrototypeDisplayValue("...............");
					jCname.setComponentPopupMenu(popup);
					jCname.addActionListener(cbaction);
				}
				{
					jCtemp = new JComboBox(new String[]{"a","b","c"});// ist normal ein anderer Vector
					jPanel1.add(jCtemp);
					jCtemp.setBounds(210, 72, 81, 24);
					jCtemp.setEditable(true);
					jCtemp.setComponentPopupMenu(popup);
				}
				{
					jCtime = new JComboBox(new String[]{"a","b","c"});// ist normal ein anderer Vector
					jPanel1.add(jCtime);
					jCtime.setBounds(356, 72, 63, 24);
					jCtime.setEditable(true);
					jCtime.setComponentPopupMenu(popup);
				}
				{
					jCdilution = new JComboBox(new String[]{"a","b","c"}) ;// ist normal ein anderer Vector
					jPanel1.add(jCdilution);
					jCdilution.setBounds(475, 72, 90, 24);
					jCdilution.setEditable(true);
					jCdilution.setComponentPopupMenu(popup);
				}
				{
					info = new JTextPane();
					jPanel1.add(info);
					info.setText("Zusatzinformationen");
					info.setBounds(53, 160, 512, 139);
				}
				{
					next = new JButton();
					jPanel1.add(next);
					next.setText("weiter");
					next.setBounds(440-80, 324, 80, 24);
					next.addActionListener(this);
				}
				{
					cancel = new JButton();
					jPanel1.add(cancel);
					cancel.setText("abbrechen");
					cancel.setBounds(565-120, 324, 120, 24);
					cancel.addActionListener(this);
				}
			}
			{
			popup = new JPopupMenu();
			    insert = new JMenuItem("hinzufügen");
			    insert.addActionListener(popupaction);
			    popup.add(insert);
			    delete = new JMenuItem("löschen");
			    delete.addActionListener(popupaction);
			    popup.add(delete);
			}
			pack();
			this.setSize(738, 421);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@Override
	public void actionPerformed(ActionEvent e) 
	{
		if(e.getSource().equals(cancel))
		{
			this.setVisible(false);
		}
		
		if(e.getSource().equals(next))
		{
			this.setVisible(false);
		}			
	}
	public class PopupAction implements ActionListener
	{
		public void actionPerformed(ActionEvent e) 
		{			
			if(e.getSource().equals(insert))
			{

			}
			
			if(e.getSource().equals(delete))
			{
				
			}
		}
	}
	
	public class CBAction implements ActionListener
	{
		public void actionPerformed(ActionEvent e) 
		{
			
		}
	}
    
}

ps: wie bekomm ich heraus auf welche combobox geklickt wurde?
 
Zuletzt bearbeitet:

weljo

Bekanntes Mitglied
noch eien kleine frage zu getInvoker() ... wo muss ich das einbaun hatte es zuerst im actionlistener ==> null dann im PopupMenuListener ==> null ... wo muss ich das einbauen??
 

Ebenius

Top Contributor
noch eien kleine frage zu getInvoker() ... wo muss ich das einbaun hatte es zuerst im actionlistener ==> null dann im PopupMenuListener ==> null ... wo muss ich das einbauen??

Verstehe ich nicht. Ich bekomme nicht [c]null[/c] aus der Action. Test-Programm:
Java:
final Object[] array = { "A", "B", "C" };
final DefaultComboBoxModel model = new DefaultComboBoxModel(array);
final JComboBox comboBox = new JComboBox(model);
comboBox.setEditable(true);
comboBox.setPrototypeDisplayValue("...............");
final JPopupMenu menu = new JPopupMenu();
comboBox.setComponentPopupMenu(menu);

menu.add(new AbstractAction("Add Item") {

  public void actionPerformed(ActionEvent e) {
    model.addElement(Character.valueOf((char) ('A' + model.getSize())));
    System.out.println(menu.getInvoker());
  }
});

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

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

weljo

Bekanntes Mitglied
ok ich bekomm jetzt mit deiner version etwas jedoch wenn ich auf den butten für das dropdown klick kommt

com.sun.java.swing.plaf.windows.WindowsComboBoxUI$XPComboBoxButton[,68,1,17x22,alignmentX=0.0,alignmentY=0.5,border=,flags=29360416,maximumSize=java.awt.Dimension[width=2147483647,height=2147483647],minimumSize=java.awt.Dimension[width=5,height=5],preferredSize=java.awt.Dimension[width=17,height=21],defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=,defaultCapable=true]

links neben dem Button:

javax.swing.JComboBox[,53,72,86x24,layout=com.sun.java.swing.plaf.windows.WindowsComboBoxUI$3,alignmentX=0.0,alignmentY=0.0,border=com.sun.java.swing.plaf.windows.XPStyle$XPStatefulFillBorder@1bab50a,flags=4194632,maximumSize=,minimumSize=,preferredSize=,isEditable=true,lightWeightPopupEnabled=true,maximumRowCount=8,selectedItemReminder= ]


und im editierbaren Bereich:

javax.swing.plaf.basic.BasicComboBoxEditor$BorderlessTextField[,1,1,62x22,layout=javax.swing.plaf.basic.BasicTextUI$UpdateHandler,alignmentX=0.0,alignmentY=0.0,border=javax.swing.border.EmptyBorder@1e5e2c3,flags=25166112,maximumSize=,minimumSize=,preferredSize=,caretColor=javax.swing.plaf.ColorUIResource[r=0,g=0,b=0],disabledTextColor=javax.swing.plaf.ColorUIResource[r=172,g=168,b=153],editable=true,margin=javax.swing.plaf.InsetsUIResource[top=2,left=2,bottom=2,right=2],selectedTextColor=javax.swing.plaf.ColorUIResource[r=255,g=255,b=255],selectionColor=javax.swing.plaf.ColorUIResource[r=49,g=106,b=197],columns=9,columnWidth=0,command=,horizontalAlignment=LEADING]


Wie kann ich jetzt rausfinden auf Welch Combobox geklickt wurde, wenn ich bei einer schon 3 verschiedene Objecte bekomm (welche keine Combobox sind)
 

Ebenius

Top Contributor
Zum Beispiel so:
Java:
final JComboBox comboBox = (JComboBox) SwingUtilities.getAncestorOfClass(JComboBox.class, menu.getInvoker());
Ebenius
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Viele ActionListener (MouseListener) - Performance AWT, Swing, JavaFX & SWT 24
ExceptionOfExpectation MouseListener-Objekte zu den Graphics-Objekten einfügen AWT, Swing, JavaFX & SWT 3
R Punkt von MouseListener hat falsche Koordinate AWT, Swing, JavaFX & SWT 2
J MouseListener wird nicht ausgeführt. AWT, Swing, JavaFX & SWT 4
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
G vorgefertigte Buttons oder neue Komponente mit MouseListener? AWT, Swing, JavaFX & SWT 0
F ListCellRenderer mit JLabel und MouseListener AWT, Swing, JavaFX & SWT 4
D Event Handling MouseListener funktioniert seit Java 8 nicht mehr AWT, Swing, JavaFX & SWT 13
M MouseListener auf table oder scrollPane AWT, Swing, JavaFX & SWT 11
B Event Handling MouseListener Behält seine Variablen, auch wenn ich ein neus Objekt erstelle AWT, Swing, JavaFX & SWT 2
D Swing &MouseListener in einem JFrame, sinnig? AWT, Swing, JavaFX & SWT 11
U MouselIstener zu JFrame AWT, Swing, JavaFX & SWT 6
F Swing MouseListener im JPanel AWT, Swing, JavaFX & SWT 3
J Swing Button mit JTable und MouseListener AWT, Swing, JavaFX & SWT 8
F JPanel + MouseListener AWT, Swing, JavaFX & SWT 5
JavaInBrain Swing Rückgabe aus MouseListener-Klasse AWT, Swing, JavaFX & SWT 3
A SWT SWT Scale und MouseListener AWT, Swing, JavaFX & SWT 7
J MouseListener und rechte Maustaste AWT, Swing, JavaFX & SWT 3
R MouseListener auf JPanel AWT, Swing, JavaFX & SWT 3
Q Swing MouseListener auf JTable geht nicht AWT, Swing, JavaFX & SWT 2
J Swing Einbau MouseListener in JPanel AWT, Swing, JavaFX & SWT 3
N Mit MouseListener X-Y Angaben vom Bild erfahren AWT, Swing, JavaFX & SWT 3
T MouseListener an Ecken von Polygonen hinzufügen AWT, Swing, JavaFX & SWT 5
H Swing JPanel in JTable mit MouseListener AWT, Swing, JavaFX & SWT 3
A Individueller MouseListener ? AWT, Swing, JavaFX & SWT 7
B MouseListener im Renderer einer JComboBox AWT, Swing, JavaFX & SWT 3
P AWT MouseListener unklare abhandlung von Events AWT, Swing, JavaFX & SWT 3
M MouseListener/MouseMotionListener AWT, Swing, JavaFX & SWT 2
njans SWT MouseListener exited AWT, Swing, JavaFX & SWT 4
danx066 MouseListener macht was er will AWT, Swing, JavaFX & SWT 14
K MouseListener für Objekte auf einem Frame AWT, Swing, JavaFX & SWT 4
P JLabel Farbe/Bild ändern aus MouseListener heraus AWT, Swing, JavaFX & SWT 3
U Swing Generierung mehrerer Kreise per MouseListener AWT, Swing, JavaFX & SWT 16
Semox Swing JApplet: Problem MouseListener Anmeldung AWT, Swing, JavaFX & SWT 3
C JTappedPane Mouselistener auf Überschrift Registerkarte AWT, Swing, JavaFX & SWT 2
M MouseListener AWT, Swing, JavaFX & SWT 3
K AWT MouseListener linke und rechte Maustaste AWT, Swing, JavaFX & SWT 5
C Swing MouseListener Doppelklick-Geschwindigkeit AWT, Swing, JavaFX & SWT 4
N Swing MouseListener in JTable AWT, Swing, JavaFX & SWT 4
1 Eigene JComponent mit MouseListener versehen AWT, Swing, JavaFX & SWT 10
Developer_X AWT Component added keinen MouseListener AWT, Swing, JavaFX & SWT 7
R MouseListener wird nicht aufgerufen AWT, Swing, JavaFX & SWT 3
P JComboBox und MouseListener AWT, Swing, JavaFX & SWT 2
raptorrs Swing MouseListener reagiert nicht auf Instanz einer JTable AWT, Swing, JavaFX & SWT 6
multiholle Swing Mouselistener auf Parentpanel immer aktiv AWT, Swing, JavaFX & SWT 7
C MouseListener und ActionListener kombinieren AWT, Swing, JavaFX & SWT 17
M Komponenten einer unbestimmten Anzahl und MouseListener AWT, Swing, JavaFX & SWT 4
A MouseListener funktionert nie AWT, Swing, JavaFX & SWT 12
C Probleme mit Größe und mit MouseListener AWT, Swing, JavaFX & SWT 2
W MouseListener für jede Zelle einer JTable AWT, Swing, JavaFX & SWT 4
E MouseListener Problem AWT, Swing, JavaFX & SWT 4
D jButton mit ImageIcon & MouseListener AWT, Swing, JavaFX & SWT 5
S MouseListener zurückverfolgung auf element. AWT, Swing, JavaFX & SWT 7
B MouseListener / doppelklick geht net AWT, Swing, JavaFX & SWT 16
M JCheckBox Standard MouseListener entfernen AWT, Swing, JavaFX & SWT 13
hdi Wie mach ich diesen MouseListener AWT, Swing, JavaFX & SWT 4
G MouseListener & KeyListener AWT, Swing, JavaFX & SWT 4
H JComboBox reagiert nicht auf MouseListener AWT, Swing, JavaFX & SWT 5
2 Mouselistener AWT, Swing, JavaFX & SWT 2
W MouseListener, getClickCount und Doppelklick AWT, Swing, JavaFX & SWT 6
S swing komponenten mit mouselistener rotieren AWT, Swing, JavaFX & SWT 15
G JFrame,JLabel,MouseListener AWT, Swing, JavaFX & SWT 6
F Wie MouseListener bei TableModel anmelden? AWT, Swing, JavaFX & SWT 3
V Frage zu MouseListener --> mousePressed() AWT, Swing, JavaFX & SWT 5
C MouseListener für Spalte eines JTables AWT, Swing, JavaFX & SWT 4
K Problem mit 2 MouseListener. AWT, Swing, JavaFX & SWT 3
M MouseMotionListener oder mouseListener AWT, Swing, JavaFX & SWT 6
T JComboBox und MouseListener AWT, Swing, JavaFX & SWT 11
F MouseListener - Unhandled IOException AWT, Swing, JavaFX & SWT 5
padde479 Statusleiste mit MouseListener aktualisieren AWT, Swing, JavaFX & SWT 3
L Problem mit MouseListener, AdjustmentListener AWT, Swing, JavaFX & SWT 6
T MouseListener Problem AWT, Swing, JavaFX & SWT 3
F Mouselistener wird wiederholt aufgerufen AWT, Swing, JavaFX & SWT 3
G Frage zu MouseListener und speichern des Wertes (reflektion? AWT, Swing, JavaFX & SWT 6
B frage zu MouseListener AWT, Swing, JavaFX & SWT 5
O MouseListener - Wert-Übergabe AWT, Swing, JavaFX & SWT 3
W JPanel, JLabel und MouseListener -> auf clicks reagieren AWT, Swing, JavaFX & SWT 5
S MouseListener auf einem einzelnen Tab setzen AWT, Swing, JavaFX & SWT 3
B MouseListener & Fenster schliessen AWT, Swing, JavaFX & SWT 3
G MouseListener AWT, Swing, JavaFX & SWT 4
G Tooltip sperrt MouseListener? AWT, Swing, JavaFX & SWT 6
S JComboBox und MouseListener AWT, Swing, JavaFX & SWT 5
D Koordinaten der Bildschirmposition auslesen (MouseListener?) AWT, Swing, JavaFX & SWT 7
A Klassenübergreifend MouseListener verwenden AWT, Swing, JavaFX & SWT 14
N "globaler" MouseListener (+MouseMotionListener) AWT, Swing, JavaFX & SWT 4
M ToolTipText für JTable mit MouseListener ohne anklicken? AWT, Swing, JavaFX & SWT 7
A MouseListener auf Bild legen ? AWT, Swing, JavaFX & SWT 16
S Mouselistener erzeugt kein Event in einem Menuitem AWT, Swing, JavaFX & SWT 2
J MouseListener AWT, Swing, JavaFX & SWT 3
A JPanels in JPanel und MouseListener AWT, Swing, JavaFX & SWT 3
C Mehrere MouseListener? AWT, Swing, JavaFX & SWT 7
U Keylistener und Mouselistener AWT, Swing, JavaFX & SWT 2
L Event-handling, MouseListener AWT, Swing, JavaFX & SWT 5
T Problem mit MouseListener bei JButton AWT, Swing, JavaFX & SWT 5
K mein keyListener scheint Konflict haben mit mouseListener AWT, Swing, JavaFX & SWT 6
G Problem mit MouseListener AWT, Swing, JavaFX & SWT 9
M JavaFX TableView nur erste Zeile editable machen und gelb markieren AWT, Swing, JavaFX & SWT 0
P Checkboxes in JTable nicht editable AWT, Swing, JavaFX & SWT 9
T JavaFX Editable Combobox Text-Selektierung nach Trigger AWT, Swing, JavaFX & SWT 4
U Swing Jtable cells value editable AWT, Swing, JavaFX & SWT 1

Ähnliche Java Themen

Neue Themen


Oben