Java und Database

Ilyustar

Mitglied
Hallo, ich hätte eine kurze Frage bzw. stehe ich vor einem Problem:
Ich habe eine Datenbank(von Access).. nun möchte ich aus dieser Datenbank z.B. die Namen auslesen (Namen = Spalte in der Tabelle), wie ich das mache weiss ich auch, nur möchte ich JEDEN dieser Namen einem Attribut einer anderen Klasse zuweisen. Das Problem das ich habe sieht wie folgt aus: Man "weiss" nicht wieviele Namen in der DB zu finden sind daher soll er sozu sagen soviele Objekte erzeugen wie es Namen gibt und die Werte dann den Objekten übergeben.
Das ist also die Idee, muss ja nicht heißen das es funktioniert :)

Der Hintergrund:
Ich möchte in einer GUI 2 Auswahllisten-Menüs haben mit den Namen drin, um dann 2 auswählen zu können und ihnen BEIDEN in einem Textfield ein Attribut zuweisen zukönnen.

Ich hoffe es ist verständlich, und überhaupt machbar..
Ilyu
 

tagedieb

Top Contributor
Wo genau liegt denn das Problem?
So wie du das beschreibst kannst du doch einfach ueber die Spalten iterieren und fuer jede Spalte dein DatenObjekt erstellen und fuegst es einer Map oder einer Liste hinzu.

Java:
	private Map<String, Object> getColumns(ResultSet rs) throws SQLException {
		Map<String, Object> columns = new TreeMap<String, Object>();
		ResultSetMetaData md = rs.getMetaData();
		for (int i = 0; i < md.getColumnCount(); i++) {
			columns.put(md.getColumnName(i),
					new CustomClass(md.getColumnName(i), md.getColumnType(i),
							rs.getObject(i)));
		}

		return columns;
	}
 

Ilyustar

Mitglied
okay, danke schonmal, muss mich natürlich erst eindenken da ich noch ein blutiger anfänger bin und manche der oben genannten methoden noch nie verwendet hab :)
Als weitere Frage: Dieses Auswahl Menu würde ich in Form einer combobox versuchen zu realisieren, ist das okay so oder wäre das eher umständlich?

vielen vielen dank nochmals :)

ilyu


edit: das problem war oder ist die tatsache dass ich dinge wie maps noch nicht kenne bzw noch nie verwendet habe, bin derzeit noch unterwegs werde es
mir dann erst später genau anschauen :)

edit2: okay habs mir jetzt ein bisschen angeschaut aber sowie ich das jetzt verstanden habe müsste es ja so sein: ich muss über die spalte "Namen" iterieren und für jede Zeile ein DatenObjekt erstellen und diese dann einer Map oder einer Liste hinzufuegen, jetzt wüsst ich noch gern den unterschied zwischen einer Map und einer Liste, google wird vermutlich helfen..
 
Zuletzt bearbeitet:

Ilyustar

Mitglied
Ich versuch mal zu erklären/zeigen was ich verstanden habe, korrigiert mich bitte wenn was falsch ist:

Java:
private Map<String, Object> getColumns(ResultSet rs) throws SQLException {
Hier erstellen wir die Methode getColumns, die wenn wir sie aufrufen ein ResultSet von uns fordert und uns eine Map zurück geben wird. (throws SQLException weiss ich leider nicht, jedoch vermute ich, dass es sowas wie eine Vereinfachung davon ist von dem was ich "gelernt" habe unzwar die DB Abfragen etc in try/catch zu hauen.)

Java:
Map<String, Object> columns = new TreeMap<String, Object>();
Hier erstellen wir die TreeMap und nennen sie "columns". (String wäre dann bei mir der Name z.b. "Hans" und das Objekt wäre dann "Spieler" wenn ich das richtig verstanden habe)

Java:
ResultSetMetaData md = rs.getMetaData();
Hier erstellen wir ein Attribut des Typs ResultSetMetaData, nennen es md und rufen vom ResultSet MetaData (welche Daten sind das genau?) ab.

Java:
for (int i = 0; i < md.getColumnCount(); i++) {
            columns.put(md.getColumnName(i),
                    new CustomClass(md.getColumnName(i), md.getColumnType(i),
                            rs.getObject(i)));
        }
Eine for-Schleife, die solange durchläuft wie die MetaData Spalten hat?
Sie fügt jedesmal der Map folgendes hinzu: den Namen der aktuellen Spalte und ein neues Objekt (der Klasse CustomClass?) mit den Argumenten des Konstruktors dieser Klasse: demNamen der aktuellen Spalte, dem aktuellen Datentyp(z.b. Integer?) und dem aktuellen Objekt(was wäre das?) des Resultsets.

Das wäre mein "Wissensstand", ich hoffe ich nerve euch nicht mit meinen, vielleicht für euch lächerlichen, Anfängerfragen.

Ilyu
 

tagedieb

Top Contributor
Soweit hast du alles richtig verstanden.

Um genau zu sein muesste die Methode so definiert sein:
Java:
private Map<String, CustomClass> getColumns(ResultSet rs) throws SQLException {

Code:
CustomClass
musst du selber nach deinen Anforderungen definieren. Ich hab dies einfach als Stellverstreter fuer Obejekte erzeugen verwendet.

Anstatt Map kannst du auch eine sortierte Liste zurueckgeben. Ich habe TreeMap verwendet damit a) die Columns alphabethisch sortiert werden und b) man mittels des Spaltennamens auf das Element zugreifen kann. Was am besten passt haengt halt von deinen Anforderungen ab.

MetaData sind Daten ueber die Tabelle selber. Hier erfaehrst du wie den Namen der Spalten, den Datentyp und vieles mehr. Dies ist sehr nuetzlich wenn du Daten generisch aktualisieren willst. Bevor du einen Datensatz aktualisierst solltest du zuvor pruefen ob der neue Wert gueltig ist. z.B. wenn man versucht einen String in einem Zahlenfeld zu speichern.

Code:
 rs.getObject(i)
gibt ein Objekt entsprechend des Datentyps zurueckt je nachdem wie es definiert wurde (String, Integer, Byte, Long, Double, Float, Short, Blob, Clob, Date, Timestamp, Time,...)
 

tagedieb

Top Contributor
Als weitere Frage: Dieses Auswahl Menu würde ich in Form einer combobox versuchen zu realisieren, ist das okay so oder wäre das eher umständlich?

Das haengt von deiner Benutzerfuehrung ab. Ich persoenlich finde Comboboxen nur begrenzt sinnvoll.
Das wichtigste ist die Uebersicht. Kann der Benutzer auf einen Blick die Daten erfassen oder muss er sich erst muehsam durchklicken???

Alternativ koennte ich mir auch eine Tabelle vorstellen. 1. Spalte enthaelt den Spaltennamen und die 2. Spalte den gespeicherten Wert. Den Wert kann man dann direkt in der Tabelle editieren.
 

Ilyustar

Mitglied
Ich habe mich jetzt, nach sehr langem rumprobieren, entschieden das ganze ein wenig zu vereinfachen.
Ich glaub ich hab mich in meinem ersten Post vielleicht auch falsch/schlecht ausgedrückt oder ich bin zu blöd um das zu verstehen was du geschrieben hast :p
Aber Ich habe eine Tabelle mit den Spalten "spielerNR" , "Name", "Vorname","Teamname" und einem Boolean "Team".
Nun will ich die Werte dieser Tabelle auslesen und die Namen aller Zeilen in zwei ComboBoxen werfen,(alle Namen in ComboBox 1, alle Namen in ComboBox 2) um dem User dann die Möglichkeit zu bieten 2 Namen auszuwählen um dann deren Boolean "Team" durch das eingeben eines "Teamnames" auf "true" zu setzen.

Demmnach habe ich diesen Code gebastelt:

Java:
private int anzahlSaetze;

public int getZeilen(){
			try {
				anzahlSaetze=0;
				Statement stmt = zugriff.createStatement();
				daten = stmt.executeQuery("SELECT spielerNR,Name,Vorname,Team FROM Spieler WHERE Team = false;");
				while (daten.next()){
					anzahlSaetze +=1;
				}
				
			}
		    catch (Exception ex) {
		    	System.out.println(ex);    
		    }
		    return anzahlSaetze;
		}

Das ist meine Methode um auszulesen wieviele Zeilen ich habe.
Ich habe es auch mit
Java:
daten.last()
int rows = daten.getRow();
daten.beforeFirst();
return rows;
probiert, jedoch nicht hinbekommen.

Das wäre dann die Methode mit der ich der Map als Key den Primärschlüssel(spielerNR) der DB übergebe und dem Value den Namen des Spielers (Vorname + Nachname).
Java:
	 public Map<Integer, String> getColumns(){
		 Map<Integer, String> columns = new TreeMap<Integer, String>();	
		 try{ 
	        Statement stmt = zugriff.createStatement();
			daten = stmt.executeQuery("SELECT spielerNR,Name,Vorname,Team FROM Spieler WHERE Team = false;");
	            for (int i = 0; i < getZeilen(); i++) {
	        	columns.put(daten.getInt(1),daten.getString(3)+daten.getString(2));
	            }
	           
		    }catch(Exception ex){
			 System.out.println(ex);
		    }
	 
	     return columns;
    }

Den Primärschlüssel spielerNr brauche ja um später wieder genau die richtigen Spieler auswählen zu können und die Namen sollen für den User sichtbarsein. Ich bin mir nicht mehr sicher ob Map hier immernoch das richtige ist oder eine Art Array schon reichen würde, jedoch kenne ich Arrays nur z.b. als
Java:
 Int spielerNr[] = new int[10]
was also nur 10 Int's abspeichern kann und nicht z.B. nen Int und nen String :x
Bei der oben beschriebenen Methode, die natürlich nicht funktioniert, bekomme ich diese Fehlermeldung:
Java:
java.sql.SQLException: [Microsoft][ODBC Driver Manager] Ungültiger Cursorstatus
Woraus ich auch schließe, dass dies auch der Grund wäre warum die getRow() Methode nicht funktionierte da ich nicht rückwärts navigieren kann?

bin hier ein bisschen am verzweifeln :/
danke fürs lesen & helfen
ilyu

PS: Sorry für das try/catch, aber weiss noch nicht genau wie ich mit SQLException umzugehen habe bzw was für eine SQLException dann beim Methoden aufruf zu verwenden wäre.
 

tagedieb

Top Contributor
ok, dann hab ich deine erste beschreibung missverstanden. :autsch:

ok nochmal von vorne.
Du liest die Daten sortiert (in der Reihenfolge wie du sie anzeigen moechtest) aus der Datenbank und speicherst sie in einer neuen Klasse Spieler.
Da noch nicht bekannt ist wievele Datensaetze vorhanden sind werden die Spieler in einer Liste gespeichert. Einen Vector eignet sich hier, da dieser direkt der JCombobox uebergeben werden kann.

Die Klasse Spieler enthaelt dann nummer, name und vorname. Die toString()-Methode wird benutzt um den Eintrag in der Combobox anzuzeigen.

Java:
     public Vector<Spieler> getSpieler(){
        Vector<Spieler> spielerListe = new Vector<Spieler>();
            try {
                Statement stmt = zugriff.createStatement();
                 ResultSet daten = stmt.executeQuery("SELECT spielerNR,Name,Vorname,Team FROM Spieler WHERE Team = false order by Name,Vorname;");
                while (daten.next()){
                    spielerListe.add(new Spieler(daten.getInt(1), daten.getString(3), daten.getString(2));
                }
                daten.close();
            }
            catch (Exception ex) {
                System.out.println(ex);    
            }
            return spielerListe;
     }

     public JCombobox renderJCombobox() {
          Vector<Spieler> spielerListe = getSpieler();
          return new JCombobox(spielerListe);
     }

Java:
Spieler.java

public class Spieler {
    int number;
    String name, vorname;

    public Spieler(int number, String name, String vorname) {
         this.number = number;
         this.name = name;
         this.vorname = vorname;
    }

    public String toString() {
        name + ' ' + vorname;
    }
}
 

Ilyustar

Mitglied
Vielen Danke, du rettest mir das Leben, das ist genau das was ich gebraucht habe :)
Nur habe ich immernoch das Problem der "java.lang.NullPointerException". Könnte jemand vielleicht mal hierdrüber schauen um zu gucken ob ich vll ein Fehler habe?
Java:
private Connection zugriff;
public boolean zugriffOeffnen(){
		boolean antwort = false;
	    try {
	    	Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
	    	String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=C:/Datenbank.MDB";
	    	zugriff = DriverManager.getConnection(url); 
	    	antwort = true;
	    }
	    catch (Exception ex) {
	    	System.out.println("Datenbankanbindung fehlgeschlagen"+ex);    
	    }
	    return antwort;
	}
	
	
	public boolean zugriffSchliessen(){
		boolean antwort = false;
		try {
			zugriff.close();
			antwort = true;
		}
	    catch (Exception ex) {
	    	System.out.println("Datenbankanbindung konnte nicht geschlossen werden"+ex);    
	    }
		return antwort;
	
	}

Ich versteh noch nicht ganz warum ich die toString() Methode in der Spieler Klasse brauche wenn ich die Daten ja schon in der renderJComboBox() Methode übergebe? Also ich verstehs schon denk ich, ich hab mit dem Vector die Nummer noch dabei und an die JComboBox will ich ja nur den Namen haben, die toString Methode macht aus den 2 Strings (Vorname und Name) ein String den ich dann an die ComboBox ranhängen kann. Übergebe ich dann der ComboBox 2 Sachen? Ich kann die renderMethode nicht benutzen da sich die GUI in einer anderen Klasse befindet und die toString Methode zeigt bei mir einen Fehler an. Ich konnte mich damit auch noch nicht richtig befassen, da ich jetzt direkt von der Schule zur Arbeit muss :p

Vielen Dank nochmals du hast mich aufjedenfall schon ma ein rießen Stück weitergebracht,
Ilyu

EDIT:
So ich habs mir mal bissl genauer angeschaut und es ein bisschen mehr verstanden :)
Ich weiss nicht ob ich das jetzt falsch interpretiere da toString eher Neuland für mich ist, ich habe den Fehler der auftrat beseitigt indem ich sie in
Java:
public String toString() {
        return vorname + " " + name;
        
    }
umgeändert habe.
und das renderJCombobox() in
Java:
public JComboBox renderJCombobox() {
         Vector<Spieler> spielerListe = getSpieler();
         return new JComboBox(spielerListe);
    }
desweiteren hatte ich vergessen die ComboBox zu importieren :x

Ich stehe aber leider immernoch vor dem
Java:
java.lang.NullPointerException
Problem
Wenn ich die Methode getSpieler() aufrufe bekam ich den ersten Namen und dann die NullPointerException. Mittlerweile bekomm ich nur noch die NullPointerException :/

Wenn ich eine JComboBox in meiner GUI Klasse erstelle
Java:
private JComboBox getJComboBox1() {
		if (jComboBox1 == null) {
			jComboBox1 = dbz.renderJCombobox();
			jComboBox1.setBounds(new java.awt.Rectangle(77,47,186,39));
		}
		return jComboBox1;
	}
bekomm ich diesen Fehler:
Java:
Exception in thread "main" java.lang.NullPointerException
	at paketFensterklassen.Teamfenster.getJComboBox2(Teamfenster.java:78)
	at paketFensterklassen.Teamfenster.getJContentPane(Teamfenster.java:47)
	at paketFensterklassen.Teamfenster.initialize(Teamfenster.java:33)
	at paketFensterklassen.Teamfenster.<init>(Teamfenster.java:22)
	at paketFachklassen.Start.main(Start.java:11)

Das würde ja eigentlich heißen, dass das ResultSet leer ist oder nicht? Aber woran liegt das? Die DB ist gefüllt mit Beispiel Werten und die Abfrage stimmt doch auch? :/

so long,
ilyu :)

edit2:

Habe jetzt, um zu testen ob es an der Abfrage liegt, mal ne Methode geschrieben die einfach nur die Namen in der Konsole ausgibt - und siehe da, das klappt natürlich :x
Hier die Methode:
Java:
public void test(){
	   	try{
			Statement stmt = zugriff.createStatement();
            ResultSet daten = stmt.executeQuery("SELECT spielerNr,Name,Vorname,Team FROM Spieler WHERE Team = false order by Name,Vorname;");
			while(daten.next()){
				System.out.println(daten.getString(2));
			}
			
		}catch(Exception e){
			System.out.println(e);
		}
	
		
	}

getSpieler() lieft immernoch eine java.lang.NullPointerException, an irgend einem kleinen Detail liegts wohl nur welches ???:L
 
Zuletzt bearbeitet:

Ilyustar

Mitglied
So kleines Update..
Ich habe die getSpieler() Methode ein wenig abgeändert:
Java:
while (daten.next()){             	
	                	spieler = new Spieler(daten.getInt(1), daten.getString(3), daten.getString(2));
	                    spielerListe.addElement(spieler);
	                    System.out.println(this.spieler.toString());
Jetzt spuckt sie die Namen aus jedoch klappt das mit der ComboBox leider nicht -> weiterhin die obenbeschriebene NullPointerException.
 

tagedieb

Top Contributor
Sorry fuer die Tipfehler, hab das mal so aus dem Gedaechnis geschrieben...:(

Code:
paketFensterklassen.Teamfenster.[B]getJComboBox2[/B](Teamfenster.java:78)

Kannst du mal die Methode getJComboBox2(...) zeigen? Was passiert in Zeite 78? Da duerfte der Grund fuer die NullPointerException liegen.
 

Ilyustar

Mitglied
Java:
package paketFensterklassen;
import paketFachklassen.*;
import java.awt.BorderLayout;
import javax.swing.*;
import java.util.*;

public class Teamfenster extends JFrame {

	private JPanel jContentPane = null;
	private JButton jButton = null;
	private JComboBox jComboBox = null;
	private DB_Zugriff dbz;

	public Teamfenster(DB_Zugriff dbz) {
		super();
		initialize();
		this.dbz = dbz;
	}
	
	public void test(){
		System.out.println(dbz.getSpieler());
	}
	


	private void initialize() {
		this.setSize(300, 200);
		this.setContentPane(getJContentPane());
		this.setTitle("JFrame");
	}


	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(getJButton(), null);
			jContentPane.add(getJComboBox(), null);
		}
		return jContentPane;
	}

	private JButton getJButton() {
		if (jButton == null) {
			jButton = new JButton();
			jButton.setBounds(new java.awt.Rectangle(8,128,90,26));
			jButton.setText("Schließen");
			jButton.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					setVisible(false);
				}
			});
		}
		return jButton;
	}

	
	private JComboBox getJComboBox() {
		if (jComboBox == null) {
			jComboBox = dbz.renderJCombobox();
			jComboBox.setBounds(new java.awt.Rectangle(29,39,189,38));
		}
		return jComboBox;
	}
	
	
	
	
	

}

So hier mal die komplette Klasse, die getJComboBox() Methode ist die selbe wie die getJComboBox2() Methode. Ich hatte sie oben schon gepostet nur heisst sie einmal getJComboBox2 und einmal getJComboBox ohne Zahl, da ich neue ComboBoxen erstellt habe, wieder rausgelöscht hab etc etc

Ich habs auch mit
Java:
private JComboBox getJComboBox() {
		if (jComboBox == null) {
			jComboBox = new ComboBox(dbz.getSpieler());
			jComboBox.setBounds(new java.awt.Rectangle(29,39,189,38));
		}
		return jComboBox;
	}
versucht, klappt leider auch nicht.
 
Zuletzt bearbeitet:

tagedieb

Top Contributor
Leider sieht man hier nicht wo die NullPointerException geworfen wird, da die Zeile 78 ja nicht mehr vorhanden ist.

Ich vermute es liegt an
Code:
jComboBox = dbz.renderJCombobox();
. Es koennte sein, das hier ein Null Objekt zurueckgeliefert wird aufgrund einer tiefergelegenen SQLException. Debug mal durch deinen Code oder bau ein paar System.out.println(..) ein um zu pruefen welches Objekt null ist.
 

Ilyustar

Mitglied
Leider sieht man hier nicht wo die NullPointerException geworfen wird, da die Zeile 78 ja nicht mehr vorhanden ist.

Ich vermute es liegt an
Code:
jComboBox = dbz.renderJCombobox();
. Es koennte sein, das hier ein Null Objekt zurueckgeliefert wird aufgrund einer tiefergelegenen SQLException. Debug mal durch deinen Code oder bau ein paar System.out.println(..) ein um zu pruefen welches Objekt null ist.

könntest du da etwas spezifischer werden mit den syso's? Peinlich zu sagen, aber ich weiss nicht wie man "durch den Code Debugged" :x

Die Zeile wurden verschoben als ich den Code bisschen aufgeräumt hab.
Java:
Exception in thread "main" java.lang.NullPointerException
	at paketFensterklassen.Teamfenster.getJComboBox(Teamfenster.java:60)
	at paketFensterklassen.Teamfenster.getJContentPane(Teamfenster.java:38)
	at paketFensterklassen.Teamfenster.initialize(Teamfenster.java:28)
	at paketFensterklassen.Teamfenster.<init>(Teamfenster.java:16)
	at paketFachklassen.Start.main(Start.java:14)
Das müssten die aktuellen Lines sein.



Ich poste mal noch ein bisschen Code:

Java:
package paketFachklassen;
import paketFensterklassen.*;
import java.sql.*;
import java.util.*;
import javax.swing.*;

public class Start {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		DB_Zugriff dbz = new DB_Zugriff();
		Teamfenster t1 = new Teamfenster(dbz);
		Matchfenster m1 = new Matchfenster();
		Tabellenfenster b1 = new Tabellenfenster();
		Menu menu = new Menu(t1, m1, b1);
		menu.setVisible(true);

		dbz.zugriffOeffnen();
		dbz.getSpieler();
                dbz.zugriffSchliessen();

	}

}
Das ist die Klasse mit meiner Main Methode in der ich die Objekte der Klassen erstelle und übergebe.
So klappt das auch und die Namen werden ausgegeben. Wenn ich aber versuche über das Objekt von Teamfenster auf die getSpieler() - Methode zuzugreifen bekomm ich immernoch einen NullExceptionPointer = Er wird auch einen leeren Vector übergeben. Das erste was mir jetzt eingefallen ist war das zugriffOeffnen/Schliessen um überhaupt auf die DB zugreifen zu können aber selbst wenn ich das in die Teamfenster Klasse oder in die getSpieler() bzw renderJComboBox() Methoden mit einbau klappts nicht :x


Edit:
Also ich hab jetzt so "halbwegs"(glaube ich) rausgefunden wie Debugge. Ich mache das in Eclipse nur weiss ich jetzt halt nicht genau nach was ich schauen muss bzw wo ich das sehe.
vll das hier:

Java:
paketFensterklassen.Teamfenster[frame0,0,0,300x200,invalid,hidden,layout=java.awt.BorderLayout,title=,resizable,normal,defaultCloseOperation=HIDE_ON_CLOSE,rootPane=javax.swing.JRootPane[,0,0,0x0,invalid,layout=javax.swing.JRootPane$RootLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=16777673,maximumSize=,minimumSize=,preferredSize=],rootPaneCheckingEnabled=true]

Gute Nacht,
der müde Ilyu
 
Zuletzt bearbeitet:

Ilyustar

Mitglied
Es funktioniert! Unglaublich aber wahr :x
Jetzt trennen mich nur noch kleine Dinge vom Abschluss meines Projekts..
- Wie setzte ich die ComboBoxen unter "Abhänigkeit" d.h. sie löscht das selectedItem aus der anderen und umgekehrt?
- Ich habe die ComboBox jetzt mit dem Vector gefüllt, jedoch fehlt mir jetzt die Syntax um über die ComboBox auf ein Attribut des Objekts des Vectors zuzugreifen :X
- Ich habe in meiner GUI Textfelder die ausgefüllt werden und nicht leer sein sollen wenn man den Button "erstellen" drückt
nur fehlt mir die passende Anweisung dafür :eek:
Ich habe es schon probiert mit:
Java:
if(txt1.getText() == null)
if(txt1.getText() == "")
if(txt1.getText.equals(null)
if(txt1.getText.equals("")

so long
Ilyu
 

tagedieb

Top Contributor
Wie setzte ich die ComboBoxen unter "Abhänigkeit" d.h. sie löscht das selectedItem aus der anderen und umgekehrt?

Java:
		final Vector<Spieler> spielerListe = dbz.getSpieler();
		jComboBox.setModel(new DefaultComboBoxModel(spielerListe));
		Spieler spieler = (Spieler) jComboBox.getSelectedItem();
		jComboBox.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				Vector<Spieler> spielerListeNew = new Vector<Spieler>(spielerListe);
//				spielerListeNew.remove(jComboBox.getSelectedIndex());
				spielerListeNew.remove(jComboBox.getSelectedItem()); // Spieler.class add public boolean equals(Object obj)
				jComboBox1.setModel(new DefaultComboBoxModel(spielerListeNew));
				jComboBox1.repaint();
			}
		});

Ich habe die ComboBox jetzt mit dem Vector gefüllt, jedoch fehlt mir jetzt die Syntax um über die ComboBox auf ein Attribut des Objekts des Vectors zuzugreifen :X

Java:
		Spieler spieler = (Spieler) jComboBox.getSelectedItem();


Ich habe in meiner GUI Textfelder die ausgefüllt werden und nicht leer sein sollen wenn man den Button "erstellen" drückt

Java:
if(txt1.getText().equals("")){
  // Fehlermeldung
}
 

Ilyustar

Mitglied
also
Java:
if(txt1.getText().equals("")){
funktioniert prima.
Die Abhänigkeit und den Zugriff versteh ich noch nicht ganz.
Hier mal das ganze wie ich es umgesetzt habe ohne die 2 nicht verstandenen Dinge:

Java:
package paketFensterklassen;

import java.awt.BorderLayout;
import javax.swing.*;
import java.util.*;
import paketFachklassen.*;
import javax.swing.JButton;

public class Teamfenster extends JFrame {

	private JPanel jContentPane = null;
	private JButton jButton = null;
	private JComboBox jComboBox = null;
	private DB_Zugriff dbz;
	private JComboBox jComboBox1 = null;
	private JLabel jLabel = null;
	private JLabel jLabel1 = null;
	private JLabel jLabel2 = null;
	private JButton jButton1 = null;
	private JTextField jTextField = null;
	
	public Teamfenster(DB_Zugriff dbz) {
		super();
		initialize();
		this.dbz = dbz;
	}
	
	public void updateCombobox(JComboBox jcb){
		dbz.zugriffOeffnen();
		Vector<Spieler> spielerListe = dbz.getSpieler();
		dbz.zugriffSchliessen();
		jcb.setModel(new DefaultComboBoxModel(spielerListe));
		
	}
	
	
	private void initialize() {
		this.setSize(344, 234);
		this.setResizable(false);
		this.setContentPane(getJContentPane());
		this.setTitle("Team erstellen");
	}


	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jLabel2 = new JLabel();
			jLabel2.setBounds(new java.awt.Rectangle(30,80,67,16));
			jLabel2.setText("Teamname:");
			jLabel1 = new JLabel();
			jLabel1.setBounds(new java.awt.Rectangle(224,12,50,22));
			jLabel1.setText("Spieler2:");
			jLabel = new JLabel();
			jLabel.setBounds(new java.awt.Rectangle(58,11,50,22));
			jLabel.setText("Spieler1:");
			jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(getJButton(), null);
			jContentPane.add(getJComboBox(), null);
			jContentPane.add(getJComboBox1(), null);
			jContentPane.add(jLabel, null);
			jContentPane.add(jLabel1, null);
			jContentPane.add(jLabel2, null);
			jContentPane.add(getJButton1(), null);
			jContentPane.add(getJTextField(), null);
		}
		return jContentPane;
	}

	private JButton getJButton() {
		if (jButton == null) {
			jButton = new JButton();
			jButton.setBounds(new java.awt.Rectangle(10,165,90,26));
			jButton.setText("Schließen");
			jButton.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					setVisible(false);
				}
			});
		}
		return jButton;
	}

	
	private JComboBox getJComboBox() {
		if (jComboBox == null) {
			jComboBox = new JComboBox();
			jComboBox.setBounds(new java.awt.Rectangle(20,39,141,19));
		}
		return jComboBox;
	}
	

	
	private JComboBox getJComboBox1() {
		if (jComboBox1 == null) {
			jComboBox1 = new JComboBox();
			jComboBox1.setBounds(new java.awt.Rectangle(182,39,141,19));
			jComboBox1.addItemListener(new java.awt.event.ItemListener() {
				public void itemStateChanged(java.awt.event.ItemEvent e) {
					updateCombobox(jComboBox);
					jComboBox.removeItem(jComboBox1.getSelectedItem());
					
				}
			});
		}
		return jComboBox1;
	}

	private JButton getJButton1() {
		if (jButton1 == null) {
			jButton1 = new JButton();
			jButton1.setBounds(new java.awt.Rectangle(121,112,90,26));
			jButton1.setText("Erstellen");
			jButton1.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					if(jTextField.getText().equals("")){
						JOptionPane.showMessageDialog(null,"Geben Sie einen Teamnamen ein.","Fehler!",JOptionPane.ERROR_MESSAGE);
					}else{
					dbz.zugriffOeffnen();
					//dbz.teamErstellen(dbz.neuerPrimTeam(),jComboBox.getSelectedItem(),jComboBox1.getSelectedItem(), jTextField.getText());
					dbz.zugriffSchliessen();
					JOptionPane.showMessageDialog(null,"Das Team wurde erstellt.","Erfolg!",JOptionPane.INFORMATION_MESSAGE);
					updateCombobox(jComboBox);
					updateCombobox(jComboBox1);
					}
				}
			});
		}
		return jButton1;
	}


	private JTextField getJTextField() {
		if (jTextField == null) {
			jTextField = new JTextField();
			jTextField.setBounds(new java.awt.Rectangle(113,80,120,19));
		}
		return jTextField;
	}

	public JComboBox getJCB1(){
		return jComboBox1;
	}
	public JComboBox getJCB(){
		return jComboBox;
	}
	
	
	
}

Das ist die komplette Klasse, ich habe selbst versucht da was zu basteln mit der ComboBox1, was aber noch nicht ganz funktioniert.
 

tagedieb

Top Contributor
Hier noch ein paar kleine Aenderungen, damit der Update wechselseitig funktioniert. Beim initialisieren mueste man noch darauf achten, dass defaultmaesig nicht derselbe Spieler ausgewaehlt wird.



Java:
	private JComboBox getJComboBox() {
		if (jComboBox == null) {
			jComboBox = new JComboBox();
			jComboBox.setBounds(new java.awt.Rectangle(20, 39, 141, 19));
			jComboBox.addItemListener(new java.awt.event.ItemListener() {
				public void itemStateChanged(java.awt.event.ItemEvent e) {
					if (e.getStateChange() == ItemEvent.SELECTED) {
						Object obj = jComboBox1.getSelectedItem();
						updateCombobox(jComboBox1, obj);
						jComboBox1.removeItem(jComboBox.getSelectedItem());
					}
				}
			});
		}
		return jComboBox;
	}

	private JComboBox getJComboBox1() {
		if (jComboBox1 == null) {
			jComboBox1 = new JComboBox();
			jComboBox1.setBounds(new java.awt.Rectangle(182, 39, 141, 19));
			jComboBox1.addItemListener(new java.awt.event.ItemListener() {
				public void itemStateChanged(java.awt.event.ItemEvent e) {
					if (e.getStateChange() == ItemEvent.SELECTED) {
						Object obj = jComboBox.getSelectedItem();
						updateCombobox(jComboBox, obj);
						jComboBox.removeItem(jComboBox1.getSelectedItem());
					}
				}
			});
		}
		return jComboBox1;
	}


	public void updateCombobox(JComboBox jcb, Object item) {
		dbz.zugriffOeffnen();
		Vector<Spieler> spielerListe = dbz.getSpieler();
		dbz.zugriffSchliessen();
		ComboBoxModel model = new DefaultComboBoxModel(spielerListe);
		if (item != null)
			model.setSelectedItem(item);
		jcb.setModel(model);

	}

Spieler.java
Java:
	@Override
	public boolean equals(Object obj) {
		if (obj != null && obj instanceof Spieler) {
			Spieler spieler = (Spieler) obj;
			return spieler.getNumber() == getNumber();
		}
		return false;
	}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Methoden java map ersatz für c++map Java Basics - Anfänger-Themen 2
M Erste Schritte Java Primzahltester Java Basics - Anfänger-Themen 3
A csv Reader für Java? Java Basics - Anfänger-Themen 24
K Java - Enums Java Basics - Anfänger-Themen 30
tomzen Java Unterstützung für exel dateien installieren. Java Basics - Anfänger-Themen 2
Rookar java.lang.NoClassDefFoundError: org/json/JSONException Java Basics - Anfänger-Themen 2
Rookar Mit Button andere java öffnen Java Basics - Anfänger-Themen 4
F Java Object to Hashmap ? Java Basics - Anfänger-Themen 6
I Backend in Java und Ansicht von Dateien in statische HTML Seiten? Java Basics - Anfänger-Themen 15
R Input/Output Verwendung des Euro-Zeichens in Java Java Basics - Anfänger-Themen 7
I Push Nachrichten von JAVA EE App an Mobile App Java Basics - Anfänger-Themen 3
H .java Dateien in Eclipse einbinden und ausführen Java Basics - Anfänger-Themen 1
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
O Java Kara geschweifte Klammern Java Basics - Anfänger-Themen 2
richis-fragen Mausrad logitech kann links und rechts klick wie in java abragen. Java Basics - Anfänger-Themen 15
XWing Java Klssenproblem Java Basics - Anfänger-Themen 4
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
G Java 8 - Support-Ende Java Basics - Anfänger-Themen 7
T Java Weihnachtsbaum + Rahmen Java Basics - Anfänger-Themen 1
N Will mit Java anfangen Java Basics - Anfänger-Themen 13
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
M Java Mail Programm Java Basics - Anfänger-Themen 4
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
J Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6
JaZuDemNo Java im Studium Java Basics - Anfänger-Themen 7
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
V Java-Ausnahmebehandlung: Behandlung geprüfter Ausnahmen Java Basics - Anfänger-Themen 1
krgewb Java Streams Java Basics - Anfänger-Themen 10
A Überwältigt von der komplexen Java Welt Java Basics - Anfänger-Themen 29
O Mehrfachvererbung auf Spezifikations- und Implementierungsebene in Java. Interfaces Java Basics - Anfänger-Themen 19
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
R mit Java API arbeiten Java Basics - Anfänger-Themen 9
P JDK installieren Probleme bei der Java-Installation Java Basics - Anfänger-Themen 8
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
Timo12345 JNLP File mit Java öffnen Java Basics - Anfänger-Themen 2
S Video Editierung mit Java.._ Java Basics - Anfänger-Themen 2
F Einstelungen in Java - CursorBlinkRate Java Basics - Anfänger-Themen 10
A PHP $_POST["name"] in Java Java Basics - Anfänger-Themen 3
vivansai21 Is there a oneliner to create a SortedSet filled with one or multiple elements in Java? Java Basics - Anfänger-Themen 9
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
Arjunreddy Can someone please tell me how to use a debugger in BlueJ(a Java environment) Java Basics - Anfänger-Themen 1
M Java assoziationen (UML) Java Basics - Anfänger-Themen 8
H Excel-Tabellen mit Java erstellen Java Basics - Anfänger-Themen 4
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
xXGrowGuruXx Java einstieg, leichte sache 0 verstanden Java Basics - Anfänger-Themen 7
A java.sql.SQLException: Data type mismatch. Java Basics - Anfänger-Themen 1
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
A Lerngruppe Java Java Basics - Anfänger-Themen 2
G Help me in the Java Program Java Basics - Anfänger-Themen 2
L Java- Vererbung Java Basics - Anfänger-Themen 4
LimDul Suche Java Stream Tutorial Java Basics - Anfänger-Themen 2
_so_far_away_ Ich möchte Java lernen Java Basics - Anfänger-Themen 11
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
MoxMorris this Keyword in Java Java Basics - Anfänger-Themen 14
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
wolei JAVA Zeitdifferenz feststellen. Java Basics - Anfänger-Themen 4
DiyarcanZeren Rekursion in Java Java Basics - Anfänger-Themen 5
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
monsterherz Ablauf der Erstellung eines Java Programmes Java Basics - Anfänger-Themen 17
monsterherz Circle.java:5: error: <identifier> expected Java Basics - Anfänger-Themen 2
julian-fr Wie kann ich am besten Java lernen? Java Basics - Anfänger-Themen 17
A Java-Properties und -RessourceBundles Java Basics - Anfänger-Themen 5
lrnz22 Java-Basics-Aufgabe Java Basics - Anfänger-Themen 8
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
G In ein java Dokument Ton einbinden Java Basics - Anfänger-Themen 1
C was heisst es wenn java ']' erwartet ? Java Basics - Anfänger-Themen 2
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
J Java Testklasse Java Basics - Anfänger-Themen 5
P Java Selenium . Parameterized.Parameters erzeugt eine Fehlermeldung Java Basics - Anfänger-Themen 14
W Java-Code mit Array Java Basics - Anfänger-Themen 14
W Java-Code Java Basics - Anfänger-Themen 2
P BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium Java Basics - Anfänger-Themen 4
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18
W Java code- TicTac toe Java Basics - Anfänger-Themen 51
Ostkreuz Java Docs Java Basics - Anfänger-Themen 9
R Java boolean Unterschied " == " und " = " Java Basics - Anfänger-Themen 3
D Java Programm mit Batch-Datei starten Java Basics - Anfänger-Themen 32
W Java-code Java Basics - Anfänger-Themen 8
W Java-code Java Basics - Anfänger-Themen 9
W Java-Code erklären Java Basics - Anfänger-Themen 6
A Java Kurs / Tutorial Java Basics - Anfänger-Themen 6
K Java Lotto Spiel; ich komme nicht weiter Java Basics - Anfänger-Themen 15
R Operatoren Rechenoperation in Java verwenden für Calculator Java Basics - Anfänger-Themen 2
P Java 2n Potenzieren Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben