JComboBox ohne ItemListener

Status
Nicht offen für weitere Antworten.

DaKu

Aktives Mitglied
Hallo

Aufbauend auf dem (Quelltext von SKY) habe ich nun das Problem, das ich keinen ItemListener einbauen kann.
Dadurch besteht dieses Problem (siehe bis unten), da ich 2 von diesen JComboboxen eingebaut habe.

Gibt es eine andere Möglichkeit das Problem zu lösen, da beim selectieren der 2. JComboBox der ListCellRenderer von der 1. Box nochmal aufgerufen wird, was störend ist?

Danke schonmal im voraus.
 

DaKu

Aktives Mitglied
Hallo

war bis heute unterwegs, deswegen konnte ich so schnell nicht antworten

EDIT - hier mal ausführbar:
die MAIN
Code:
import javax.swing.JFrame;
import javax.swing.WindowConstants;
public class Main 
{
	static JFrame frame;
		
	public static void main(String[] args)	
	{		
		//frame = new Testumgebung();	
		frame = new Testumgebung1();
		frame.setBounds(50,50,800,600);
		frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}	
}

und hier mal die Testumgebung1
Code:
import javax.swing.*; 
import java.awt.Color;
import java.awt.Component;
 

public class Testumgebung1 extends JFrame 
{   
       
   private void Test() 
   { 
	  final JComboBox box = new JComboBox(); 
      this.getContentPane().add(box); 
      box.setBackground(Color.white);
	  box.setBounds(5,50,145,35);      
	  box.addItem("BMW"); 
      box.addItem("FORD"); 
      box.addItem("Renault");      
      box.setSelectedIndex( -1); 
      DefaultListCellRenderer renderer = new DefaultListCellRenderer() 
      { 
    	  public Component getListCellRendererComponent(JList list, 
    			  Object value, int index, boolean isSelected, boolean cellHasFocus) 
    	  { 
    		  // nichts gewählt 
    		  if (value == null) 
    		  { 
    			  value = "Auto"; 
    		  }
    		  if (isSelected == true && value != null)
    		  {
    			  System.out.println(value);
    		  }	
    		  super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); 
    		  return this; 
    	  } 
      }; 
      box.setRenderer(renderer);
      
      
      final JComboBox box1 = new JComboBox(); 
      this.getContentPane().add(box1); 
      box1.setBackground(Color.white);
	  box1.setBounds(5,100,145,35);
	  box1.addItem("Ikarus"); 
      box1.addItem("Mitsubishi"); 
      box1.addItem("MB");      
      box1.setSelectedIndex( -1); 
      DefaultListCellRenderer renderer1 = new DefaultListCellRenderer() 
      { 
    	  public Component getListCellRendererComponent(JList list1, 
    			  Object value1, int index1, boolean isSelected1, boolean cellHasFocus1) 
    	  { 
    		  // nichts gewählt 
    		  if (value1 == null) 
    		  { 
    			  value1 = "Bus"; 
    		  } 
    		  if (isSelected1 == true && value1 != null)
    		  {
    			  System.out.println(value1);
    		  }	
    		  super.getListCellRendererComponent(list1, value1, index1, isSelected1, cellHasFocus1); 
    		  return this; 
    	  } 
      }; 
      box1.setRenderer(renderer1);
   }
   
   
   public Testumgebung1() 
   {  
	   super("Testumgebung");
		{	
			this.getContentPane().setBackground(Color.yellow);
			this.getContentPane().setLayout(null);			
			Test();
		}
   } 
}


so und der Fehler ist iben beschrieben unter "PROBLEM" im 1. Post
 

DaKu

Aktives Mitglied
wenn es zu einfach ist, könnt ihr mir dann wenigstens ein Tip geben? Ich komme nicht drauf.
Das 2. Was ich mir gedacht habe, ist ein 2. Eventhandler, mit ItemListener, aber 2 Stück, habe es auch nicht hinbekommen.

HILFEEEEE
 

L-ectron-X

Gesperrter Benutzer
Hab deinen Code mal angepasst.

Code:
import javax.swing.*;
import java.awt.Color;
import java.awt.Component;
import java.awt.event.*;


public class Testumgebung1 extends JFrame
{

   private void test()
   {
     final JComboBox box = new JComboBox();
      this.getContentPane().add(box);
      box.setBackground(Color.white);
      box.setBounds(5,50,145,25);
      box.addItem("BMW");
      box.addItem("FORD");
      box.addItem("Renault");
      box.addItemListener(new ItemListener() {
         public void itemStateChanged(ItemEvent e) {
            if(e.getStateChange() == ItemEvent.SELECTED) {
               System.out.println(box.getSelectedItem());
            }
         }
      });

      final JComboBox box1 = new JComboBox();
      this.getContentPane().add(box1);
      box1.setBackground(Color.white);
      box1.setBounds(5,100,145,25);
      box1.addItem("Ikarus");
      box1.addItem("Mitsubishi");
      box1.addItem("MB");
      box1.addItemListener(new ItemListener() {
         public void itemStateChanged(ItemEvent e) {
            if(e.getStateChange() == ItemEvent.SELECTED) {
               System.out.println(box1.getSelectedItem());
            }
         }
      });

   }

   public Testumgebung1()
   {
      super("Testumgebung");
      {
         this.getContentPane().setBackground(Color.yellow);
         this.getContentPane().setLayout(null);
         test();
      }
   }
}
 

DaKu

Aktives Mitglied
Danke erstmal.

aber genau so sollte es nicht sein, da mir Sky diese JCombobox gemacht hat und so sollte sie auch funktionieren.
(Hoffe, das hört sich jetzt nicht allzu böse an :D )
Der Hauptvorteil dabei ist, das wenn ich einfach nur über die Einträge in der Box gehe, mir schon das Bild dazu angezeigt wird und ich nicht erst auf eines drauf klicken muss.
Das was mich dabei nur stört ist:

Beim starten des Programmes gibt er schon 2x "Auto" aus

Klicke ich mit der Maus auf "Auto", geht das Drop-Down-Feld auf, und lasse wieder los, klicke ich nochmal mit der Maus auf "Auto", schliesst das Drop-Down-Feld und gibt "Auto" aus, und lasse wieder los :arrow: das passt soweit, funktioniert wunderbar, kann ich auch so oft machen wie ich will
Klicke ich mit der Maus auf "Bus", geht das Drop-Down-Feld auf, und lasse wieder los, klicke ich nochmal mit der Maus auf "Bus", schliesst das Drop-Down-Feld und gibt "Bus" aus, und lasse wieder los :arrow: das passt soweit und funktioniert auch wunderbar und kann ich auch so oft machen wie ich will

ABER

Klicke ich mit der Maus auf "Auto", geht das Drop-Down-Feld auf, und lasse wieder los, klicke ich nochmal mit der Maus auf "Auto", schliesst das Drop-Down-Feld und gibt "Auto" aus, und lasse wieder los
Klicke ich mit der Maus auf "Bus", geht das Drop-Down-Feld auf, und lasse wieder los, klicke ich nochmal mit der Maus auf "Bus", schliesst das Drop-Down-Feld und gibt "Bus" aus, und lasse wieder los
Klicke ich mit der Maus auf "Auto", geht das Drop-Down-Feld auf und gibt "Bus" aus :!: :?: :!:, und lasse wieder los, klicke ich nochmal mit der Maus auf "Auto", schliesst das Drop-Down-Feld und gibt "Auto" aus, und lasse wieder los
 

Reeny

Aktives Mitglied
Jaja ... nicht ungeduldig werden :wink:

Sag mal, was hast du eigentlich vor ...? Soll jedes Mal, wenn das ausgewählte Item der ComboBox gerendert wird, deine Ausgabe kommen, oder nur jedesmal dann, wenn durch den Benutzer etwas ausgewählt (bzw. markiert) wird?

Dein Code ist im Moment für den ersteren Fall bestimmt, aber ich glaub irgendwie nicht, dass das so gedacht ist, oder ...?
:bahnhof:
 

DaKu

Aktives Mitglied
Moin.
Also, es soll eine Art "Vorschauansicht" gemacht werden, also ein Bild geladen werden (was jetzt noch durch das System.out.println() gemacht wird), jedesmal wenn etwas in der Box selectiert wird, aber noch nicht ausgewählt ist (hoffe, ihr versteht das jetzt), wenn etwas ausgewählt wurde, bleibt das selektierte da stehen.
Mit einer Box funktioniert das auch wunderbar, nur halt mit 2 von den Boxen nicht.
 

Reeny

Aktives Mitglied
Mann, mann, mann!!!

Da hab ich jetzt aber lange rumgeforscht und -gebastelt! Wer hätte gedacht, dass das so kompliziert sein kann ...! Ich hab jetzt eine Lösung, die nicht 100% schön ist, aber du kannst das selber noch verbessern :wink:

Der Text des ausgewählten Elements wird immer zwei mal ausgegeben, weil zum Einen der RepaintManager das ausgewählte Element rendern möchte und danach auch noch der ToolTipManager. Da du (hoffentlich!) keine ToolTips für die Elemente brauchst, wird bei meinem Lösungsweg die Liste der ComboBox aus dem Register des ToolTipManagers entfernt.

Code:
final JComboBox box = new JComboBox();
this.getContentPane().add(box);
box.setBackground(Color.white);
box.setBounds(5,50,145,35);     
box.addItem("BMW");
box.addItem("FORD");
box.addItem("Renault");     
box.setSelectedIndex( -1);

DefaultListCellRenderer renderer = new DefaultListCellRenderer()
{
	private boolean firstRendering = true;
	public Component getListCellRendererComponent(JList list,
			Object value, int index, boolean isSelected, boolean cellHasFocus)
	{
		// beim ersten Mal Rendern die Liste aus dem Register entfernen
		if (firstRendering){
			ToolTipManager.sharedInstance().unregisterComponent(list);
			firstRendering = false;
		}
				
		// nichts gewählt
		if (value == null)
		{
			value = "Auto";
		}
		else if (isSelected == true)
		{
			System.out.println("1 - "+value);
		}   
		super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
		return this;
	}
};

box.setRenderer(renderer);
		

final JComboBox box1 = new JComboBox();
this.getContentPane().add(box1);
box1.setBackground(Color.white);
box1.setBounds(5,100,145,35);
box1.addItem("Ikarus");
box1.addItem("Mitsubishi");
box1.addItem("MB");     
box1.setSelectedIndex( -1);
		
DefaultListCellRenderer renderer1 = new DefaultListCellRenderer()
{
	private boolean firstRendering = true;
	public Component getListCellRendererComponent(JList list1,
			Object value1, int index1, boolean isSelected1, boolean cellHasFocus1)
	{
		// beim ersten Mal Rendern die Liste aus dem Register entfernen
		if (firstRendering){
			ToolTipManager.sharedInstance().unregisterComponent(list1);
			firstRendering = false;
		}
				
		// nichts gewählt
		if (value1 == null)
		{
			value1 = "Bus";
		}
		else if(isSelected1 == true)
		{
			System.out.println("2 - "+value1);
		}   
		super.getListCellRendererComponent(list1, value1, index1, isSelected1, cellHasFocus1);
		return this;
	}
};

box1.setRenderer(renderer1);

Änderungen in Zeile 17 - 21, 55 - 59, sowie 28 und 66 (verhindert das "Auto" gleich beim Start des Programms angezeigt wird).


Schön ist der Code nicht, weil ich erst beim Rendern die Liste aus dem ToolTipManager entferne, aber ich weiß nicht, wie ich sonst auf diese Liste zugreifen kann.
 
G

Guest

Gast
Danke erstmal
Aber das Problem, das ich habe, besteht immernoch, das mit 2x Auto am Anfang war nur ein Schönheitsfehler, aber der Fehler den ich meine ist was nach dem ABER in dem Post darüber steht, das ist, was das Programm total durcheinander bringt und welches hier auch noch drinn ist.
(oder nur bei mir ???:L ?)
Eine Idee ist halt 2 Listener einzubauen, aber ich habe noch nicht rausbekommen, wie, also der der drinne ist DefaultListCellRenderer und der von L-ectron-X, der ItemListener
 

Reeny

Aktives Mitglied
Mist, den Kunden doch nicht zufrieden gestellt :wink:

Erstens: Ich hab diesen difusen Effekt bei mir gar nicht. Die anderen wahrscheinlich auch nicht, weshalb wohl jeder dein Problem nur halb versteht ... :bae: Welche Java-Version benutzt du?

Zweitens: Zwischen Renderer und Listener gibt es einen Unterschied. Der Renderer wird gebraucht, um bestimmte Teile einer Benutzeroberfläche (z.B. Listeninhalte bei JComboBox) darstellen zu können. Der Listener wird über bestimmte Änderung von Zuständen informiert, auf die man dann reagieren kann.


Tritt das selbe Phänomen immer noch bei dir unverändert auf?! Ich kann das gar nicht verstehen...! ???:L
 

DaKu

Aktives Mitglied
Moin nochmal

1.) also habe JRE 1.5.0_06
2.) wie bekomme ich dann beide da rein?, also den ItemListener und den Renderer
mit det Listenermethode funktioniert es, aber da habe ich die "Vorschauanzeige" nicht mehr, da er ja auf eine Auswahl wartet

3.) mache ich es mir zu schwer und es geht irgendwie einfacher?
(einfacher schon, indem ich den schnickschnack weg lasse, aber das ist dann nicht mehr Sinn der Sache)
 

Reeny

Aktives Mitglied
zu 1: Hab die selbe Version ... Daran liegt es also schon mal nicht.
zu 2: Na, ganz normal mit
Code:
box.setRenderer(renderer);
box.addItemListener(new ItemListener() {
   public void itemStateChanged(ItemEvent e) {
      if(e.getStateChange() == ItemEvent.SELECTED) {
         System.out.println(box.getSelectedItem());
      }
   }
});
zu 3: Wenn man sich erstmal in ein Problem reingewurschtelt hat und das lösen möchte, kommt man da nur schwer wieder raus. Wahrscheinlich machen wir es uns zu schwer ... aber das verflixte Problem muss doch zu lösen sein!
 

DaKu

Aktives Mitglied
hmmm, irgendwie hatte ich da schonmal was ausprobiert gehabt ???:L , werde aber am Montag mal schauen, melde mich auf jeden fall nochmal deswegen :wink:
 

DaKu

Aktives Mitglied
so, habe es heute schon geschafft :D
ja, habe es mal in mein Programm eingebaut und brauchte das letzte mit dem ItemListener dann doch nicht mehr, aber DANKE nocheinmal, funktioniert wunderbar (nur, wie lange noch, muss noch 2 von dem Boxen "verbauen" :wink: ) :applaus:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Meine JCombobox werte an ohne selectiert zu haben Java Basics - Anfänger-Themen 6
D Probleme mit dem Windowbuilder und JComboBox Java Basics - Anfänger-Themen 2
J Selektiertes Element von jComboBox zwischenspeichern und wieder einsetzen Java Basics - Anfänger-Themen 0
C Erste Schritte JComboBox Einträge auf Duplikat prüfen Java Basics - Anfänger-Themen 4
A Mit JComboBox Ergebnis einen Integer aus einer anderen Klasse aufrufen. Java Basics - Anfänger-Themen 2
M JComboBox ersten Eintrag leerlassen bzw. Platzhalter Java Basics - Anfänger-Themen 1
Tommy135 Klassen jComboBox macht nicht was sie soll Java Basics - Anfänger-Themen 4
S ArrayListe in einer JComboBox anzeigen Java Basics - Anfänger-Themen 10
H JComboBox wird nicht angezeigt Java Basics - Anfänger-Themen 3
M JComboBox feste double Werte zu ordnen Java Basics - Anfänger-Themen 8
T Einträge in jComboBox aus Liste übernehmen Java Basics - Anfänger-Themen 1
T Auslesen mehrerer jComboBox (-en) Java Basics - Anfänger-Themen 4
H JCombobox Java Basics - Anfänger-Themen 1
D JComboBox duplizieren Java Basics - Anfänger-Themen 2
T jComboBox Java Basics - Anfänger-Themen 9
GadgetSofa jComboBox mit dem Button verbinden. Aber wie?? Java Basics - Anfänger-Themen 4
A GUI Absturz nach 3x benutzen einer JComboBox Java Basics - Anfänger-Themen 11
S Erste Schritte JComboBox Java Basics - Anfänger-Themen 1
S JCombobox und JButton verknüpfen Java Basics - Anfänger-Themen 6
S JComboBox automatisch füllen Java Basics - Anfänger-Themen 3
C JComboBox "Hilfstext" anzeigen Java Basics - Anfänger-Themen 11
T Datentypen Jcombobox Array Java Basics - Anfänger-Themen 1
J JComboBox in andere Klasse Java Basics - Anfänger-Themen 2
S Variablen auslesen beim JCombobox Java Basics - Anfänger-Themen 0
K JCombobox Eclipse Java Basics - Anfänger-Themen 7
D JComboBox erzeugen Java Basics - Anfänger-Themen 1
T JComboBox Java Basics - Anfänger-Themen 3
B ArrayLists in JCombobox Java Basics - Anfänger-Themen 10
M JComboBox und ItemListener/ItemEvent Problem Java Basics - Anfänger-Themen 3
M JComboBox Auswahl Java Basics - Anfänger-Themen 10
N Compiler-Fehler JComboBox DefaultListCellRenderer Java Basics - Anfänger-Themen 2
J JComboBox - Auswahl auslesen Java Basics - Anfänger-Themen 2
J jcombobox.getSelectedItem - nullpointerexception Java Basics - Anfänger-Themen 3
C JComboBox setSelectedItem(Object) Problem Java Basics - Anfänger-Themen 5
M JComboBox Obergrenzen/Untergrenze festlegen? Java Basics - Anfänger-Themen 5
B JComboBox(editable) Java Basics - Anfänger-Themen 6
K JComboBox hat volle Höhe uber das gesamte JPane, warum? Java Basics - Anfänger-Themen 2
S JComboBox mit ArrayList füllen Java Basics - Anfänger-Themen 7
C Ausgewähltes Element einer JCombobox in JTextField Java Basics - Anfänger-Themen 3
S JComboBox füllen Java Basics - Anfänger-Themen 9
C JComboBox Java Basics - Anfänger-Themen 9
R Auf auswahl in ner JComboBox reagieren Java Basics - Anfänger-Themen 3
T Frage zu JComboBox Java Basics - Anfänger-Themen 6
G JComboBox wird nicht gezeichnet Java Basics - Anfänger-Themen 3
N JComboBox mit Dateinamen befüllen Java Basics - Anfänger-Themen 7
M JComboBox => Item String => Color Java Basics - Anfänger-Themen 2
StrikeTom Editable JComboBox + enter Wie??? Java Basics - Anfänger-Themen 3
J JComboBox Listener Java Basics - Anfänger-Themen 6
F Werte aus JComboBox auslesen und Zahlen zuordnen Java Basics - Anfänger-Themen 5
S JComboBox Platzhalter Java Basics - Anfänger-Themen 7
J jComboBox auf default setzen wie? Java Basics - Anfänger-Themen 3
J daten über jComboBox ausgeben wie? Java Basics - Anfänger-Themen 2
S Vector -> String JComboBox Java Basics - Anfänger-Themen 11
E JComboBox Java Basics - Anfänger-Themen 4
J jComboBox.getSelectedIndex() Java Basics - Anfänger-Themen 8
J Funktion Auslösen über JComboBox Java Basics - Anfänger-Themen 2
T JComboBox klappt nur ein- bis zweimal auf Java Basics - Anfänger-Themen 30
S Kein Event bei Click auf JComboBox Java Basics - Anfänger-Themen 4
Developer_X JComboBox getSelectedFilè??? Java Basics - Anfänger-Themen 4
T Daten eines Ordners in JCombobox anzeigen Java Basics - Anfänger-Themen 5
M Einträge in JComboBox farblich hinterlegen? Java Basics - Anfänger-Themen 2
6 Dritte JComboBox in Abhaengigkeit von zwei vorherigen Java Basics - Anfänger-Themen 4
G 2. JComboBox in Abhängigkeit der 1. JCombobox füllen Java Basics - Anfänger-Themen 2
S Problem mit JComboBox Java Basics - Anfänger-Themen 9
H jcombobox mit nur einem Item Java Basics - Anfänger-Themen 7
G Inhalt einer JComboBox wechseln Java Basics - Anfänger-Themen 5
G Problem mit JComboBox Java Basics - Anfänger-Themen 15
G JComboBox Strukturiert anzeigen Java Basics - Anfänger-Themen 6
Schandro Hotkeys bei JComboBox abschalten Java Basics - Anfänger-Themen 3
G JComboBox soll beim Öffnen eine andere JCB öffnen Java Basics - Anfänger-Themen 2
P Hilfe für JComboBox, bmp einbinden/bestimmte punkte auf bmp Java Basics - Anfänger-Themen 3
G JComboBox - BasicComboPopup Java Basics - Anfänger-Themen 4
S Inhalt der JComboBox vergrößtert die JCB ? Java Basics - Anfänger-Themen 2
B Werte aus einer JCombobox in eine Liste Java Basics - Anfänger-Themen 16
mwildam JComboBox FocusGained feuert nicht wenn editable Java Basics - Anfänger-Themen 4
F ComboBox im Vektor auslesen, Vektor<JComboBox> Java Basics - Anfänger-Themen 6
S Jcombobox und 2maliges anzeigen wegen ItemStateChanged? Java Basics - Anfänger-Themen 3
W setModel feuert ActionEvent bei JComboBox Java Basics - Anfänger-Themen 2
G Frage zu JComboBox Java Basics - Anfänger-Themen 2
W Actionlistener oder Itemlistener bei JCombobox ? Java Basics - Anfänger-Themen 4
G JComboBox Java Basics - Anfänger-Themen 7
G JComboBox macht Probleme Java Basics - Anfänger-Themen 7
G JComboBox alphabetisch sortieren Java Basics - Anfänger-Themen 2
D Locale zur Laufzeit über JComboBox laden? Java Basics - Anfänger-Themen 17
G JComboBox um eine Methode erweitern Java Basics - Anfänger-Themen 2
G jcombobox deaktivieren Java Basics - Anfänger-Themen 4
M Werte aus Jcombobox sollten als int-Werte zurück gegeben . Java Basics - Anfänger-Themen 7
D Items in JComboBox überprüfen Java Basics - Anfänger-Themen 3
G JComboBox zweckentfremden ? Java Basics - Anfänger-Themen 5
N JCombobox Pfeil nach unten bild auf linke seite, geht das? Java Basics - Anfänger-Themen 8
T JComboBox Problem Java Basics - Anfänger-Themen 4
D JComboBox titel Java Basics - Anfänger-Themen 16
M füllen JComboBox funktioniert nicht Java Basics - Anfänger-Themen 11
J JCombobox Item auswählen Java Basics - Anfänger-Themen 13
A Text einer JComboBox während der Laufzeit ändern ? Java Basics - Anfänger-Themen 4
dercheffe 3x jcombobox nacheinander füllen Java Basics - Anfänger-Themen 6
J Inhalt der JComboBox variable Java Basics - Anfänger-Themen 2
O JComboBox Item soll sich als String speichern Java Basics - Anfänger-Themen 5
B unvollständige Anzeige von JComboBox Werten Java Basics - Anfänger-Themen 5
G JComboBox gibt SelectedItem immer doppelt aus Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben