JComboBox gibt falsche werte

Status
Nicht offen für weitere Antworten.

Feld

Mitglied
Hallo
Ich habe 2 Probleme mit swing componenten und hoffe das jemand mir helfen kann

problem 1:
JComboBox gibt nicht die richtigen werte zurück

ich hab folgende combobox

Java:
private JComboBox getIdBox ( )
	{
		if ( idBox == null )
		{
			idBox = new JComboBox ( );
			idBox.setSize ( new Dimension ( 150, 30 ) );
			idBox.setEditable ( true );
			for ( int i = 0; i < 8; i++ )
			{
				idBox.addItem ( new Integer ( i ) );
			}
			idBox.addItemListener ( this );
		}
		return idBox;
	}
//listener dafür
public void itemStateChanged ( java.awt.event.ItemEvent e )
	{
//destId ist ein integer advansed ist JTextArea
		destId = ( ( Integer ) e.getItem ( ) ).intValue ( ); // index equals id
		advansed.append ( ( ( Integer ) e.getItem ( ) ).toString ( ) );
	}

JComboBox wird mit einfachen zahlen von 0 bis 7 gefüllt und dann wenn ich wsa neu wähle soll mir dieses Zahl angeigt werden.
Nur bekomme ich nicht die zahlen von 0 bis 7 zurück, sondern immer mit dem vorherigen zahl zusammen. Also wenn ich von 1 auf 2 wechsle bekomme ich 12 zurück.
desweiteren wird aufgerolltes JComboBox von daarunter liegenden panal überdeckt - und ich hab keine ahnung wie ich sage das JComboBox oben sein soll.

Sieht einer woran es liegt?

2es problem ist das JCheckBox wird gar nicht angezeigt, obwohl ich es auf visible stelle

Java:
JCheckBox getAvanseMode ( )
	{
		if ( advanseMode == null )
		{
			advanseMode = new JCheckBox ( );
			advanseMode.setActionCommand ( "ADVANSE_M" );
			advanseMode.setBackground ( new Color ( 61, 203, 250 ) );
			advanseMode.setText ( "activate advanse modus" );
			advanseMode.setFont ( new Font ( "Dialog", Font.BOLD, 10 ) );
			advanseMode.setPreferredSize ( new Dimension ( 200, 30 ) );
			advanseMode.setSize ( new Dimension ( 100, 25 ) );
			advanseMode.setVisible ( true );
			advanseMode.addChangeListener ( new javax.swing.event.ChangeListener ( )
			{
				@SuppressWarnings ( "synthetic-access" ) public void stateChanged ( javax.swing.event.ChangeEvent e )
				{
					if ( visible )
					{
						visible = false;
					}
					else
					{
						visible = true;
					}
					advanced.setVisible ( visible );
				}
			} );
		}
		return advanseMode;
	}
//dann eingefügt in ein panel p2
p2.add ( getAvanseMode ( ) );

Wieso sehe ich es nicht?

Danke falls einer mir hilft
 
Problem 1: Why is itemStateChanged on JComboBox is called twice when changed? - Stack Overflow
itemStateChanged wird eben zweimal aufgerufen, einmal für Deselect des alten Items und einem für den Select des neuen Items.

Problem 2: Im Prinzip ist es Richtig was du da treibst. Mal nach dem p2.add ein p2.validate() probiert, so dass der LayoutManager das Layout aktualisiert oder so? Oder vielleicht liegt deine ComboBox hinter irgendwelchen anderen Komponeneten versteckt. Welches Layout hast du denn bei p2 gesetzt?
 
Danke, das erklärt genau mein problem mit idBox. Weiß aber jetzt nicht mehr wie ich die items wieder rankomme. e.getItem() get nicht mehr.

Nun habe ich es so versucht wie in deinem link

Java:
idBox.addItemListener ( new ItemListener ( )
			{
				@SuppressWarnings ( "synthetic-access" ) public void itemStateChanged ( ItemEvent e )
				{
					destId = ( ( Integer ) e.getItem ( ) ).intValue ( ); // index equals id
					advanced.append ( ( ( Integer ) e.getItem ( ) ).toString ( ) );
					System.out.println ( e.getItem ( ) + " " + e.getStateChange ( ) );
				}
			} );

Aber so werden immer noch 2 sachen auf ein mal ausgegeben
 
Java:
idBox.addItemListener ( new ItemListener ( )
			{
				@SuppressWarnings ( "synthetic-access" ) public void itemStateChanged ( ItemEvent e )
				{
					if (e.getStateChange ( ) == ItemEvent.SELECTED){
						destId = ( ( Integer ) e.getItem ( ) ).intValue ( ); // index equals id
						advanced.append ( ( ( Integer ) e.getItem ( ) ).toString ( ) );	
						System.out.println ( e.getItem ( ) + " " + e.getStateChange ( ) );
					}
				}
			} );
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben