# "größeres Problem" mit JComboBox und Textfield



## sturdy (24. Mai 2005)

hi ,

hab ein Problem.
Ich hab ja dieses Filmverwaltungsprogramm.
Bei der Filmeingabe bzw später beim ändern der Details , möchte ich folgendes haben
Filmname , Format usw ist klar ist Textfield.
Jetzt soll beim Status eine Combox hin wo man auswählen kann ob "vorhanden" oder "verliehen" .
Wenn nun verliehen ausgewählt wird soll das Textfield "status" editable sein , ansonsten nicht.

Also das Filmeingabe Menü sieht wie folgt aus :


```
Container pane = getContentPane();
		JPanel p;
		// Eingabefelder im Center
		p = new JPanel();
		p.setLayout(new GridLayout(10,2,2,2));
		p.add(new JLabel("Filmnummer"));
		tNr = new JTextField(5);
		p.add(tNr);
		p.add(new JLabel("Filmname"));
		tName = new JTextField(10);
		p.add(tName);
		p.add(new JLabel("Genre"));
		tGenre = new JTextField(5);
		p.add(tGenre);
		p.add(new JLabel("Laufzeit"));
		tLaufzeit = new JTextField(5);
		p.add(tLaufzeit);
		p.add(new JLabel("Jahr"));
		tJahr = new JTextField(5);
		p.add(tJahr);
		p.add(new JLabel("Format"));
		tFilmFormat = new JTextField(5);
		p.add(tFilmFormat);
		p.add(new JLabel("Wertung ( IMDB )"));
		tWertung = new JTextField(5);
		p.add(tWertung);
		// JCOMBOBOX
		p.add(new JLabel("status"));
		tstatus = new JComboBox(5);              <--------- hier muss noch die auswahlbedigung rein
		p.add(tstatus);
//		tstatus.setLineWrap(true);
		pane.add(p, BorderLayout.WEST);
                                p.add(new JLabel("Person"));
		tPerson = new JTextField(5);
		p.add(tPerson);
```

Kann mir nun da jemand die Combobox einbinden ( + die Deklaration ausserhalb der Methode , also wie ich diese Oben anlege ?! 
Und zusätzlich eventuell noch den Teil mit der Bedingung wenn Vorhanden oder Verliehen ausgewählt wurde ??

Schon vielen Tausend dank für die Mühe !!!!

greetz

Tom


* SO HIER DER QUELLTEXT : HTTP://HOME.ARCOR.DE/FUTURELEECH/dvd/DVDPROGGIE.zip *


edit : 

```
if (tstatus.getText()==verliehen)
{
    tPerson.setEditable(true);
}
```
sieht das vielleicht so aus ^^ ?


----------



## Sky (24. Mai 2005)

sturdy hat gesagt.:
			
		

> Kann mir nun da jemand die Combobox einbinden ( + die Deklaration ausserhalb der Methode , also wie ich diese Oben anlege ?!


Äh, das geht doch genau wie die anderen Felder auch! Wo liegt das Problem???



			
				sturdy hat gesagt.:
			
		

> Und zusätzlich eventuell noch den Teil mit der Bedingung wenn Vorhanden oder Verliehen ausgewählt wurde ??


Du brauchst einen Listener dafür!


----------



## sturdy (24. Mai 2005)

Das Problem liegt bei Angabe der Auswahlmöglichkeiten.

Und braucht man wirklich nen Listener , reicht nicht ein einfach getText() ?


----------



## Frankie54 (24. Mai 2005)

hä ich kapier hier gar nix, wo liegt denn das problem, du kannst doch wohl eine combobox einbinden oder???


----------



## sturdy (24. Mai 2005)

jo einbinden schon , aber ich weiss nicht mehr wie man diese auswahlkriterien angibt -_-

sorry 

ich lad gleich mal den quelltext für das proggie hoch , dann könnt ihr besser gucken was ich gemacht habe


* SO HIER DER QUELLTEXT : SO HIER DER QUELLTEXT : HTTP://HOME.ARCOR.DE/FUTURELEECH/dvd/DVDPROGGIE.zip *


----------



## Sky (24. Mai 2005)

sturdy hat gesagt.:
			
		

> Das Problem liegt bei Angabe der Auswahlmöglichkeiten.
> 
> Und braucht man wirklich nen Listener , reicht nicht ein einfach getText() ?



Ich dachte Du wolltest dein Textfeld in Abhängigkeit der Combobox ändern. Das bedeutet: Änderung in der Box -> Listener reagiert -> Textfeld wird auf (dis/en)abled gesetzt.


----------



## sturdy (24. Mai 2005)

jo und ich dachte man könne das Problem mit einer If Bedingung abfragen so alla 

if ( tstatus.getText()==verliehen )
{
tPerson.setEditable(true);
}

oder geht das nicht ?


----------



## Sky (24. Mai 2005)

1.) Stringvergleiche immer mittels 'equals'!

2.) Ja klar geht das. Die Frage ist nur, wann wird diese Abfrage durchgeführt?? Mein Vorschlag war, das durch einen Listener zu machen, welcher direkt nach Änderung der Box die Abfrage durchführt. Ansonsten bekommt dein Textfeld das nicht mit!!


----------



## sturdy (24. Mai 2005)

wenn du grad zeit hättest wäre es voll lieb das grad mal aufzuschreiben  ich progge noch nicht so lang mit java und kenn mich daher noch nicht so gut mit aus , gesamter quelltext liegt dir ja oben vor , zu not einfach da reinschreiben und per mail wieder an mich ...
wollte das programm morgen meiner ausbildungsgrppe vorstellen und da sollte dieses feature noch drin sein  
hat dann nämlich keiner sowas


----------



## Sky (24. Mai 2005)

Sorry!
Helfen: gerne.
Aufgaben erledigen: NO WAY!


----------



## Frankie54 (24. Mai 2005)

Du bist in der Ausbildung und programmierst nicht so lange?? Ausbildungsbeginn war 1.Sep 04, wenn ich mich nicht irre, das jetzt über nen halbes Jahr, da solltest sowas ja wohl schon gelernt haben, das kann ich jetzt ja gar nicht glauben und dann auch noch so dreist sein und uns hier einspannen um Deine Aufgaben zu machen. Ich frage mich ernsthaft ob das DVD-Proggie überhaupt von Dir ist, wenn Du nicht mal weißt wie man Strings miteinander vergleicht und dann willste uns sowas da hinzaubern??


----------



## sturdy (24. Mai 2005)

ich hatte wenn es hoch kommt 2 monate java am stück , weil ich auch sonst noch andere kurse habe wie datenbank , sql , html und webdesign.
in der schule habe ich c++ aber das bringt mich auch nicht viel weiter.
Ich habe alle Skripte die wir bekommen haben hier @java kurs zu hause , weil wir die vor einiger zeit mal bekommen haben und die JAva Hilfe bringt mir auch nicht viel ....

ausserdem weiss ich wie man strings vergleicht 


S1.getXYZ().equals("zu vergleichender string")


und zur beruhigung : Das Programm stammt von mir .... müsste allein schon an der unsauberen Programmierweise auffallen 

Es wäre halt nur ein nettes Feature das noch drin stehen zu haben , die anderen Programmieren beispielsweise eine Kundenverwaltung , also bitte lasst mich net im Regen stehen , mit dem kleinen Feature


----------



## Gast (24. Mai 2005)

wenn Du im Kurs bist wirst ja wohl sicher nicht der einzigste sein, dann lass Dir doch dort helfen. 
Der Kursleiter, wird das sicherlich wissen...


----------



## sturdy (24. Mai 2005)

aber dann isses keine überraschung mehr -_-

naja aber schade wenn ihr mir nicht helfen wollt / könnt , muss ich mich auf die suche in anderen foren machen -_-


----------



## sturdy (24. Mai 2005)

so habe das Problem jetzt doch alleine fast gelöst bekommen und zwar wie folgt 
siehe pfeile im code


```
protected boolean checkFields()
	{
		boolean ok = true;

		if ( tNr.getText().length() == 0 )
		{
			JOptionPane.showMessageDialog(this,
			  "Es muss eine gültige Filmnnummer eingegeben werden!",
			  "Fehler", JOptionPane.ERROR_MESSAGE);
			ok = false;
		}
		if ( tName.getText().length() == 0 )
		{
			JOptionPane.showMessageDialog(this,
			  "Es muss ein gültiger Filmtitel eingegeben werden!",
			  "Fehler", JOptionPane.ERROR_MESSAGE);
			ok = false;
		}	
		
---------->>>>>	if ( tstatus.getText().equals("verliehen"))
		{
			tPerson.setEditable(true);
			JOptionPane.showMessageDialog(this,"Bitte geben Sie nun noch die Person ein an    den Sie den Film ausgeliehen haben","Fehler",JOptionPane.ERROR_MESSAGE);
			if ( tPerson.getText().length() == 0 )
			{
			return ok;
		                }
			ok = false;
		}
	return ok;
```


Jetzt ist nur noch hierbei das Problem dass ich nicht mehr in der Lage bin den Namen einzugeben .

ohne diese if abfrage


```
if ( tPerson.getText().length() == 0 )
			{
			return ok;
		                }
```

hat er ständig gesagt "Bitte geben sie den namen der person ein , die den sie den film verliehen haben


Bitte um korrektur meines fehlers den ich im moment leider nicht finde


----------



## Gast (24. Mai 2005)

Die Frage ist, wie Du den Namen eingeben willst übern DIalog oder dierekt in ein Textfeld?
und warum ohne den letzten Code die Abfrage immer kommt sollte Dir ja wohl klar sein, wenn nicht, dann enthalte ich mich mal meiner Meinung....


----------



## sturdy*notloggedin (24. Mai 2005)

Es sieht wie folgt aus :

Man gibt seinen Film ein , wenn man nun bei status verliehen eingibt , geht das Dialogfeld auf das sagt , dass man nun den namen der person eingeben soll an den der film verliehen wurde.
diesen namen gibt man in das textfeld ein und bestätgit dann mit ok.
Allerdings kommt dann dieses Dialogfeld erneut.
Ich denke das ein , dass dieses ok = false ;   fehl am platz ist und er das return ok;  gar nicht mehr erreicht


----------



## Frankie54 (24. Mai 2005)

Was bringt es Dir, wenn das return erreicht wird, also ich weiß ja nicht was Du damit bezwecken willst, aber das return ok, wird erreicht sobald in dem Textfeld kein Text steht, nur so als Tip....
Das ja echte Logik...
*Achtung Sarkasmus*


----------



## sturdy (25. Mai 2005)

Es wäre einfach nur nett wenn ihr mir sagen könntet was falsch darin ist , damit er keinen Fehler bringt und das Programm so läuft wie ich mir das vorstelle  

bitte bitte  :bahnhof:


----------



## Gast (25. Mai 2005)

Wenn Dich jemand verstehen würde, würde er Dir sicher helfen, das Problem ist aber, das Dein Quelltextausschnitt nicht zu gebrauchen ist und die Frage wo das Textfeld ist ob in einem Dialog oder nicht ist auch noch nicht beantwortet


----------



## Sky (25. Mai 2005)

Ich habe deine Source mal runter geladen und angeschaut. 

1.) es hat nicht geholfen dein Problem zu verstehen: Jemand der sowas schreibt wird doch wohl mit 'Kleinigkeiten' fertig, oder nicht?

2.) Es gibt noch ne Ganze Menge andere Sachen, die Du Dir vielleicht mal überlegen könntest, z.B.:
- Wenn eine Filmnummer bereits vergeben ist, so sollte diese nicht mehr eingebbar sein; besser noch, das Prog. gibt die Nr. vor.
- Die Eingabemöglichkeit von Buchstaben in den Feldern "Laufzeit" und "Jahr" macht nicht sonderlich viel Sinn.
- Die Spalten Format und Status sowie evtl. Genre sollten Comboxen sein


----------



## Gast (25. Mai 2005)

Anscheinend ja nicht


----------



## sturdy (25. Mai 2005)

Bei der Filmeingabe habe ich lauter Textfelder, einschließlich dem der Person an die der Film verliehen werden soll. Dieses Feld ist jedoch am Anfang von nicht editierbar.
Es wird erst in dem Moment editierbar wenn der Benutzer im darüberliegenden Feld "verliehen" eingibt.
Damit das Programm merkt das dort verliehen steht klickt er zunächst auf den OK Button. ( in diesem Moment überprüft das Programm ob "verliehen" eingegeben wurde ). Ist dies der Fall öffnet sich ein Dialogfeld in dem der Benutzer aufgefordert wird nun den Benutzernamen ( IN DAS FREIGSCHALTETE TEXTFELD ) einzugeben, und dann wieder mit OK zu bestätigen.

Dort liegt jetzt mein Fehler , wenn er wieder auf OK klickt , geht das Dialogfenster immer wieder auf , und er speichert die Person einfach nicht ...


@sky : ich weiss , das Programm ist noch verbesserungsdürftig. Solche Sachen werden später alle noch folgen aber ich wollte das Programm erstmal soweit lauffähig machen.
Der Rest kommt alles noch


----------



## Sky (25. Mai 2005)

Du mußt prüfen, ob der Status 'verliehen' ist _und_ ob die Textlänge in Person größer null (also '0') ist.


----------



## sturdy (25. Mai 2005)

ist das so richtig :


```
if ( tstatus.getText().equals("verliehen"))
		{
			tPerson.setEditable(true);
			JOptionPane.showMessageDialog(this,"Bitte geben Sie nun noch die Person ein an den Sie den Film ausgeliehen haben"
			,"Fehler",JOptionPane.ERROR_MESSAGE);
			if ( tPerson.getText().length() <= 0 )
			{
				return ok;
			}
	
		}
```


----------



## Gast (25. Mai 2005)

Also nur mal so als Tip, wenn man auf einen Button unterschiedliche Funktionen setzt und diese auch nur unter bestimmten Bedingungen aufgerufen werden sollen, dann sollte man auch ne Flag setzen!!!!


----------



## Sky (25. Mai 2005)

sturdy hat gesagt.:
			
		

> ist das so richtig :
> 
> 
> ```
> ...



Übersetzen, Probieren, Selber sehen!


----------



## sturdy (25. Mai 2005)

narf mist , ersten fehler schon gefunden  man sollte schon < & > unterscheiden können



aaah mir geht ein licht auf  


klar kommt immer das dialog fenster ..... immer wenn das verliehen drin steht , geht das ja auf 


```
if ( tstatus.getText().equals("verliehen"))
		{
			tPerson.setEditable(true);
			JOptionPane.showMessageDialog(this,"Bitte geben Sie nun noch die Person ein an den Sie den Film ausgeliehen haben"
			,"Fehler",JOptionPane.ERROR_MESSAGE);
			tstatus.setText("ausgeliehen");
			
		}
		
		if ( tPerson.getText().length() >=-1  )
			{
			theFilm.setPerson(tPerson.getText());
			ok = true;
			}
```


so müsste das laufen


----------



## Frankie54 (25. Mai 2005)

Jetzt seid doch nicht dauernd so fies zu Neulingen. Der ist halt noch ein Anfänger und kann noch nicht so viel....


----------



## sturdy (25. Mai 2005)

mmh ne läuft trotzdem nicht ....
man ich raff es einfach nicht -_-

weiss keiner rat ?


----------



## Gast (25. Mai 2005)

nope


----------



## sturdy (25. Mai 2005)

ok , hab jetzt ne auswahlbox hinbekommen 

nur wie mach ich das jetzt mit dem listener auf die combobox ?


----------



## Frankie54 (25. Mai 2005)

ja Superingo!!!!!


----------



## Sky (25. Mai 2005)

sturdy hat gesagt.:
			
		

> ok , hab jetzt ne auswahlbox hinbekommen
> 
> nur wie mach ich das jetzt mit dem listener auf die combobox ?



Sag mal, kennst Du die API schon??

JComboBox#addItemListener


----------



## Gast (31. Mai 2005)

wie wäre es anstatt hier rumzuflamen ihm einfach ne Lösung anbietet ... 

Meine Güte 

jeder fängt mal klein an


----------



## Sky (31. Mai 2005)

Anonymous hat gesagt.:
			
		

> wie wäre es anstatt hier rumzuflamen ihm einfach ne Lösung anbietet ...
> 
> Meine Güte
> 
> jeder fängt mal klein an


Natürlich fängt jeder klein an. Aber ich finde es ist nicht zu viel verlangt auch selbst mal was nachzulesen!

Die Frage: 





			
				sturdy hat gesagt.:
			
		

> nur wie mach ich das jetzt mit dem listener auf die combobox ?


 beantwortet man sich doch selbst wenn man in der API mal ein bißchen stöbert! (vor allem wenn man weiß, dass man auf eine JComboBox einen Listener setzen muss!)


----------

