# ComboBox (AWT Choice)



## sirair (3. Jun 2006)

Ich habe in diesem Applet eine ComboBox eingefügt. Das Problem ist aber, die combobox ermöglicht nicht die Auswahl von Items bzw. es schließt zu schnell.
Könntet ihr es bitte so ändern, dass es möglich ist.

Gruß


```
import java.applet.Applet;
import java.awt.*;

public class combo extends Applet {
private Choice waehle=new Choice();

  public void init() {
    waehle = new Choice();
    waehle.addItem("Gut");
    waehle.addItem("Schlecht");
    add(waehle);

  }

  public boolean action(Event event, Object object) {
    if (event.target == waehle) {
      String selection = waehle.getSelectedItem();
      if (selection.equals("Gut"))
        do1Action();
      else if (selection.equals("Schlecht"))
        do2Action();

      return(true);
    } else
      return(false);
  }

  private void do1Action() {
    System.out.println("Gut");
  }

  private void do2Action() {
    System.out.println("Schlecht");
  }

}
```


----------



## L-ectron-X (3. Jun 2006)

Bei mir gibts mit deinem Code keine Probleme, obwohl die action()-Methode deprecated ist.
Versuch es doch mal so:

```
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

public class Combo extends Applet {
  private Choice choice;

  public void init() {
    choice = new Choice();
    choice.addItem("Gut");
    choice.addItem("Schlecht");
    choice.addItemListener(new ItemListener() {
       public void itemStateChanged(ItemEvent e) {
          if(e.getStateChange() == ItemEvent.SELECTED) {
             String selected = choice.getSelectedItem();
             if(selected.equals("Gut")) {
                good();
             }
             else if(selected.equals("Schlecht")) {
                bad();
             }
          }
       }
    });
    add(choice);
  }

  private void good() {
    System.out.println("Gut");
  }

  private void bad() {
    System.out.println("Schlecht");
  }
}
```


----------



## sirair (3. Jun 2006)

Danke.
Die von mir geschickte Version war nur ein Ausschnitt von meinem Programm. Aber in meinem eigentlichen Code gibt es die Funtion repaint(). Dadurch wird verhindert, dass in der ComboBox Items gewählt werden können, weil die Bildfläche ständig neu gezecihnet wird. 
Gibt es aber dennoch eine Möglichkeit dieses Problem zu umgehen?


----------



## L-ectron-X (3. Jun 2006)

Poste mal etwas mehr Code, u.U. ist es gar nicht nötig neu zu zeichnen. Oder evt. muss die Oberfläche anders aufgeteilt werden.


----------



## sirair (3. Jun 2006)

Mit der ComboBox soll die Geschwindigkeit vom Ball eingestellt werden. 


```
import java.applet.*;
import java.awt.*;


public class Ballbewegung1 extends Applet implements Runnable
{
	// Initialisierung der Variablen
	int x_pos = 10;		// x - Position des Balles
	int y_pos = 100;	// y - Position des Balles
	int radius = 20;	// Radius des Balles
                private boolean geschw=0;
                private Choice wahl=new Choice();

	public void init()
	{
	    add(wahl);
	    wahl.addItem("Langsam");
	    wahl.addItem("Normal");

	}

	public void start ()
	{
		// Schaffen eines neuen Threads, in dem das Spiel läuft
		Thread th = new Thread (this);
		// Starten des Threads
		th.start ();
	}

	public void run ()
	{
		// Erniedrigen der ThreadPriority um zeichnen zu erleichtern
		Thread.currentThread().setPriority(Thread.MIN_PRIORITY);

		// Solange true ist läuft der Thread weiter
		while (true)
		{
			// Verändern der x- Koordinate
			x_pos ++;

			// Neuzeichnen des Applets
			repaint();

			try
			{
				// Stoppen des Threads für in Klammern angegebene Millisekunden
				Thread.sleep (10-geschw);
			}
			catch (InterruptedException ex)
			{
				// do nothing
			}

			// Zurücksetzen der ThreadPriority auf Maximalwert
			Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
		}
	}


	public void paint (Graphics g)
	{
                                wahl.setLocation(250,250);
		g.setColor  (Color.red);

		g.fillOval (x_pos - radius, y_pos - radius, 2 * radius, 2 * radius);
	}

    public boolean action(Event event, Object object) {
    if (event.target == wahl) {
      String selection = wahl.getSelectedItem();
      if (selection.equals("Langsam"))
        doChoice1Action();
      else if (selection.equals("Normal"))
        doChoice2Action();
          return(true);
        } else
      return(false);
      }

      private void doChoice1Action() {
        geschw=5;
      }

      private void doChoice2Action() {
      geschw=10;
      }


}
```


----------



## Leroy42 (3. Jun 2006)

Ich habe mir mal die Mühe gemacht, deinen Code laufen zu lassen und
war schon mal ein wenig genervt, daß du noch nicht mal einen compilierbaren
Source geschickt hast  :noe: 

```
private boolean geschw=0;
```

Ansonsten sehe ich auch keine Probleme, abgesehen davon daß der
Ball bei "Schnell" viel zu schnell wird, und man, trotz Prioritätsherabsetzung,
Schwierigkeiten hat, die Geschwindigkeit wieder zu ändern oder das
Fenster zu schließen.

BTW: 


```
wahl.setLocation(250,250);
```
hat nun wirklich nichts in der paint-Methode zu suchen.


----------

