JTable: Wie kann ich die Werte aus der selektierten Zeile au

Status
Nicht offen für weitere Antworten.

Sandro19

Mitglied
Hallo Zusammen

Ich brauch ein kleines Prgramm um Personen zu erfassen. Die Personen sind in einer Datenbank gespeichert. Die Mysql-Tabelle sieht folgendermassen aus:

Code:
// Primärschlüssel
INTEGER id
// Name der Person
VARCHAR name
// Vorname der Person
VARCHAR vorname
// Woher kommt die Person?
VARCHAR von
// Wann wurde die Person geboren
VARCHAR geb

Ich habe nun mit nem GUI Designer in eclipse eine JTable gemacht und mit Beispieldaten gefüllt. Diese Daten werden natürlich in der finalen Applikation von der MySQL DB ausgelesen.

Code:
package test;

import javax.swing.JScrollPane;
import javax.swing.JTable;

import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;


public class TableJFrame extends javax.swing.JFrame {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private JScrollPane scrollPane;

	private JTable tabelle;

	{
		// Set Look & Feel
		try {
			javax.swing.UIManager
					.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * Auto-generated main method to display this JFrame
	 */
	public static void main(String[] args) {
		TableJFrame inst = new TableJFrame();
		inst.setVisible(true);
	}

	public TableJFrame() {
		super();
		initGUI();
	}

	private void initGUI() {
		try {
			getContentPane().setLayout(null);
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			{
				scrollPane = new JScrollPane();
				getContentPane().add(scrollPane);
				scrollPane.setBounds(7, 7, 693, 301);
				{
					TableModel tabelleModel = new DefaultTableModel(
							new String[][] {
									{ "1", "Meier", "Adelheid", "Luzern", "01071944" },
									{ "2", "Meier", "Adolf", "Zürich", "06031925" },
									{ "3", "Meier", "Agathe", "Basel", "07051931" } },
							new String[] { "ID", "Name", "Vorname", "von", "geb" });
					tabelle = new JTable();
					scrollPane.setViewportView(tabelle);
					// tabelle.getColumn( "ID" ).setPreferredWidth(5);
					tabelle.setModel(tabelleModel);
				}
			}
			pack();
			this.setSize(713, 339);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

Nun mein Problem: Ich möchte gerne auf eine Zeile doppelklicken dabei geht ein neues Fenster auf (Listing 2). Wie kann ich nun die ID der ausgewählten Zeile ermitteln? Der Benutzer soll im eben aufgegangenem Fenster die Details der Person editieren können.

Listing 2:
Code:
package test;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextField;

import javax.swing.WindowConstants;


public class DetailsJFrame extends javax.swing.JFrame {
	private JLabel idLabel;
	private JLabel vornameLabel;
	private JButton saveButton;
	private JTextField gebTextField;
	private JTextField vonTextField;
	private JTextField vornameTextField;
	private JTextField nameTextField;
	private JTextField idTextField;
	private JLabel gebLabel;
	private JLabel vonLabel;
	private JLabel nameLabel;

	{
		//Set Look & Feel
		try {
			javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel");
		} catch(Exception e) {
			e.printStackTrace();
		}
	}


	/**
	* Auto-generated main method to display this JFrame
	*/
	public static void main(String[] args) {
		DetailsJFrame inst = new DetailsJFrame();
		inst.setVisible(true);
	}
	
	public DetailsJFrame() {
		super();
		initGUI();
	}
	
	private void initGUI() {
		try {
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			getContentPane().setLayout(null);
			{
				idLabel = new JLabel();
				getContentPane().add(idLabel);
				idLabel.setText("ID");
				idLabel.setBounds(7, 7, 21, 14);
			}
			{
				nameLabel = new JLabel();
				getContentPane().add(nameLabel);
				nameLabel.setText("Name");
				nameLabel.setBounds(7, 35, 28, 14);
			}
			{
				vornameLabel = new JLabel();
				getContentPane().add(vornameLabel);
				vornameLabel.setText("Vorname");
				vornameLabel.setBounds(7, 63, 49, 14);
			}
			{
				vonLabel = new JLabel();
				getContentPane().add(vonLabel);
				vonLabel.setText("von");
				vonLabel.setBounds(7, 91, 28, 14);
			}
			{
				gebLabel = new JLabel();
				getContentPane().add(gebLabel);
				gebLabel.setText("geb");
				gebLabel.setBounds(7, 119, 28, 14);
			}
			{
				idTextField = new JTextField();
				getContentPane().add(idTextField);
				idTextField.setText("ID Welche in der JTable ausgewählt wurde");
				idTextField.setBounds(63, 7, 63, 21);
				idTextField.setEditable(false);
			}
			{
				nameTextField = new JTextField();
				getContentPane().add(nameTextField);
				nameTextField.setText("NameAusDatenbank Wo ID=1");
				nameTextField.setBounds(63, 35, 133, 21);
			}
			{
				vornameTextField = new JTextField();
				getContentPane().add(vornameTextField);
				vornameTextField.setText("VornnameAusDatenbank Wo ID=1");
				vornameTextField.setBounds(63, 63, 133, 21);
			}
			{
				vonTextField = new JTextField();
				getContentPane().add(vonTextField);
				vonTextField.setText("VonAusDatenbank Wo ID=1");
				vonTextField.setBounds(63, 91, 133, 21);
			}
			{
				gebTextField = new JTextField();
				getContentPane().add(gebTextField);
				gebTextField.setText("GebAusDatenbank Wo ID=1");
				gebTextField.setBounds(63, 119, 63, 21);
			}
			{
				saveButton = new JButton();
				getContentPane().add(saveButton);
				saveButton.setText("Speichern");
				saveButton.setBounds(119, 168, 84, 21);
			}
			pack();
			this.setSize(218, 223);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

Wäre unheimlich froh wenn mir jemand helfen könnte. Es ist eines meiner ersten Programme. Ich weiss dass es einen Listener braucht, nur welchen???
 

André Uhres

Top Contributor
MouseListener -> mouseReleased -> getclickCount -> getValueAt -> id an DetailsDialog über Konstruktor weiter geben
(für die Details würde ich einen modalen JDialog nehmen und nicht einen JFrame )
 

HoaX

Top Contributor
1) das listing von deinem detailsfenster hättest du dir sparen können, hat ja nicht wirklich was mit dem problem zu tun.

2) der titel ist unpassend, wo ist hier bitte ein problem mit sql? "JTable: Wie kann ich die Werte aus der selektierten Zeile auslesen" wäre treffender ...

3) genug gemosert, mal was konstruktives: ;-)
du kannst getValue vom TableModel aufrufen mit der aktuellen zeile (getSelectedRow) und eben dem passenden spaltenwert.
es wäre sicherlich nicht schlecht wenn du dein eigenes model scheibst ... aber das ist natürlich dir überlassen.

4) nix schlimmes, ehr ne geschmacksfrage: ich würde den nativen lookandfeel bevorzugen, dann wird unter win automatisch der richtige genommen, und unter linux und co sieht es auch erträglich aus ;)
 

Sandro19

Mitglied
Wie...Was muss ich machen...? :bahnhof: Was für ein Model muss ich schreiben, und zu was ist das gut? Bzw. Was sind die Vorteile?
 

HoaX

Top Contributor
machen musst du garnix, es war nur ein vorschlag.

was für ein model? na von welchem hab ich denn gerade geschrieben? vom TableModel!

der vorteil ist dass du es soweit spezialisieren kannst wie du willst. z.b. kann es selbständig die daten aus der db laden, ohne dass du die daten als array aufbereiten musst, oder du kannst eine funktion getIdFromRow einführen die dir die id der entsprecheenden zeile zurückgibt. oder du dannst auch einfach ein copy&paste von DefaultTableModel machen um so zu tun als ob um dein gewissen zu beruhigen ;)
 

Sandro19

Mitglied
Ich habe das hier im Code gefunden.

Code:
new DefaultTableModel

Ich geh mal davon aus, dass ich nun eine Klasse erstellen muss und diese dann MyTableModel o.ä. nennen muss und dann statt dem DefaultTableModel instanziiere. Und diese beinhaltet Methoden mit denen ich dann die ID auslesen kann? Nur... wie muss das aussehen?
 

Leroy42

Top Contributor
HoaX hat gesagt.:
um so zu tun als ob um dein gewissen zu beruhigen ;)

:cool:

Also ich hab' dieselbe Aufgabenstellung (Auswahl eines Kunden aus
einer Tabelle zum öffnen eines Formulars zur Änderung seiner Daten)
so implementiert.

Code:
		kundenTabelle.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				if (e.getClickCount() == 2) {
					int row = kundenTabelle.getSelectedRow();
					if (row >= 0)
					editKunde(kundenListe.get(row));
				}
			}
		});

klappt tadellos!
 

HoaX

Top Contributor
nur musst du deine einträge doppelt pflegen, in kundenliste und kundenTabelle-seinem-model ...
 

HoaX

Top Contributor
du musst dennoch min. kundenTabelleSeinModel.fireDataChanged aufrufen wenn sich die liste ändert. wenn man statt dessen die ganze liste nur über ein object anspricht hat man das problem nicht. man kann ja ohne weiteres von arraylist o.ä. ableiten und tablemodel implementieren.
 

HoaX

Top Contributor
nochmal für dich sandro:
du hast im moment deine daten alle nur im tablemodel, was auch eigentlich gut so ist. da du das defaulttablemodel verwendest bist du aber in der handhabe dieser daten etwas eingeschränkt. wenn du dir eine klasse von (z.B.) defaulttablemodel ableitest und diese verwendest kannst du methoden wie getIdForRow(int) einbauen und diese an geeigneter stelle nutzen. du hast also wieder volle macht über das was im model passiert und bist nicht ausgesperrt wie bei direkter benutzung von defauttablemodel.

leroy42 benutzt auch ein defaulttablemodel, welches aber die daten aus einer liste list (gibts nen passenden konstruktor für). sein vorschlag war dann die id über die liste statt über das model zu bestimmen. für statische daten mag das ok sein, aber sobald sich der inhalt von liste ändert muss man "von hand" auch dem model bescheid sagen dass sich was geändert hat.
ein weiteres problem ergibt sich wenn man z.B. einen filter zwischen tablemodel und table legt. dann stimmt nämlich der tabellenindex nichtmehr mit dem index in der liste überein ...

darum mein vorschlag: leite eine arraylist ab und implementiere TableModel bzw umgedreht leite von DefaultTableModel ab und benutze zur datenhaltung was du magst. so kannst du dir viel arbeit sparen und hast die volle kontrolle.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Werte aus JTable auslesen Java Basics - Anfänger-Themen 4
G JTable: Werte in Tabelle direkt ansprechen Java Basics - Anfänger-Themen 3
S JCheckbox-Werte in JTable ändern Java Basics - Anfänger-Themen 2
G JTable (Werte aus der Datenbank) Java Basics - Anfänger-Themen 5
L Werte auslesen aus einer JTable Java Basics - Anfänger-Themen 2
B JTable Werte aktualisieren Java Basics - Anfänger-Themen 2
R Double Werte formatieren in JTable Java Basics - Anfänger-Themen 4
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
richis-fragen JTable Header ausgeblendete (width = 0) nicht per mouseDragged aufziehen. Java Basics - Anfänger-Themen 9
richis-fragen JTable sowohl Spaltennamen wie auch Spaltenbeschriftungen Java Basics - Anfänger-Themen 7
richis-fragen JTable effektiv angezeigter Text ausgeben nicht Inhalt vom Model Java Basics - Anfänger-Themen 9
G JTable Listselectionlistener friert das Programm ein Java Basics - Anfänger-Themen 8
Mady Daten von JList & Combobox in JTable adden Java Basics - Anfänger-Themen 2
W Liste mit Listen in JTable darstellen Java Basics - Anfänger-Themen 1
J Zelleninhalt einer Jtable löschen Java Basics - Anfänger-Themen 2
E JTable einzelne Zelle färben Java Basics - Anfänger-Themen 2
thobren jtable arraylist Java Basics - Anfänger-Themen 12
thobren JTable Icon Java Basics - Anfänger-Themen 1
R Compiler-Fehler JTable mit XML befüllen | The constructor JTable(Object[], String[]) is undefined Java Basics - Anfänger-Themen 10
H Kapselung JProgressBar in JTable, aber getValueAt() greift nicht Java Basics - Anfänger-Themen 7
G JTable, Zeile auswählen und Ergebnis an Schaltfläche übergeben Java Basics - Anfänger-Themen 4
J Jtable Eingabe nach Klick ausserhalb der Tabelle übernehmen Java Basics - Anfänger-Themen 6
J JTable Spalteninhalt löschen Java Basics - Anfänger-Themen 1
J JTable Titel wird nicht angezeigt Java Basics - Anfänger-Themen 6
B jTable Spalte summieren Java Basics - Anfänger-Themen 7
N JTable auslesen Java Basics - Anfänger-Themen 6
O JTable in Excel mit Farben Java Basics - Anfänger-Themen 8
O Kommentar auf JTable Zelle Java Basics - Anfänger-Themen 2
M Jtable Reenderer Java Basics - Anfänger-Themen 0
O Popoup Menü im JTable richtig anzeigen Java Basics - Anfänger-Themen 6
M Jtable änderung updaten Java Basics - Anfänger-Themen 2
O JTable Suchfunktion Java Basics - Anfänger-Themen 2
M jTable bekommt null Java Basics - Anfänger-Themen 1
M JTable an andere Klasse übergeben Java Basics - Anfänger-Themen 2
M Datenbank in jTable Laden Java Basics - Anfänger-Themen 49
M Klasse in JTable einfügen Java Basics - Anfänger-Themen 7
S JTable Java Basics - Anfänger-Themen 16
S JTable mit Daten füllen Java Basics - Anfänger-Themen 7
L JTable Tagebuch Spaltenhöhe verändern Java Basics - Anfänger-Themen 3
S JTable - Filter an anderen Colums Java Basics - Anfänger-Themen 2
R JTable Suchfunktion mit SQL Daten Java Basics - Anfänger-Themen 2
C JTable update mit MySQL Datenbank Java Basics - Anfänger-Themen 1
C Best Practice JTable in MVC Pattern Java Basics - Anfänger-Themen 7
J Daten einer Textdatei in ein JTable importieren. Java Basics - Anfänger-Themen 3
A zykl. Aktualisierne JTable Java Basics - Anfänger-Themen 9
C Endlosschleife bei füllen von Daten im JTable Java Basics - Anfänger-Themen 5
A Probleme beim zykl. aktulisieren von Daten in JTable Java Basics - Anfänger-Themen 3
V JTable welcher Listener ? Java Basics - Anfänger-Themen 7
D Falsche Zeile wird in JTable gelöscht Java Basics - Anfänger-Themen 6
D MySQL Abfrage in JTable speichern Java Basics - Anfänger-Themen 43
D JTable Zeile wird nicht in MySQL gelöscht Java Basics - Anfänger-Themen 16
D JTable Zeilen löschen Java Basics - Anfänger-Themen 5
C Klassen JTable wird ohne Header aufgebaut Java Basics - Anfänger-Themen 6
K (JTable) Text einer Zelle auf der linken Seite kürzel Java Basics - Anfänger-Themen 2
B Kniffel JTable Java Basics - Anfänger-Themen 5
N JTable flackert Java Basics - Anfänger-Themen 8
T JTable Daten aus txt datei Java Basics - Anfänger-Themen 3
J ArrayList wird in JTable falsch angezeigt Java Basics - Anfänger-Themen 0
J Eintragen von Personen in JTable Java Basics - Anfänger-Themen 4
X JTable mit grünen und roten Punkten Java Basics - Anfänger-Themen 2
LexeB4F DEL --> JTable Zelleninhalt Java Basics - Anfänger-Themen 3
R JTable Auslesen Java Basics - Anfänger-Themen 1
Crazynet jTable erste Zeile mit deffinierten Werten Java Basics - Anfänger-Themen 0
K Collections Sortieren nach zweiter Spalte in JTable Java Basics - Anfänger-Themen 18
J JTable Wert gleich überschreiben Java Basics - Anfänger-Themen 6
S Zeile entfernen aus JTable Java Basics - Anfänger-Themen 15
S JTable clonen Java Basics - Anfänger-Themen 5
H Best Practice PDF JTable Java Basics - Anfänger-Themen 4
S In JTable Zeile selektieren mit Mausklick Java Basics - Anfänger-Themen 16
D JTable Probleme beim Sortieren von Zahlen. Java Basics - Anfänger-Themen 6
M JTable mit XML datei befüllen Java Basics - Anfänger-Themen 1
F Zeile bei JTable hinzufügen Java Basics - Anfänger-Themen 6
K JTable Bild einfügen Java Basics - Anfänger-Themen 1
M [JTable] getValue throws ArrayOutOfBoundException Java Basics - Anfänger-Themen 1
B JTable - Highlighter ??? Java Basics - Anfänger-Themen 3
S JTable LinkedList <Objekt> befüllen Java Basics - Anfänger-Themen 1
S JTable dynamisch mit Datenbankinhalten füllen Java Basics - Anfänger-Themen 6
W JTable mit einem JButton-Array füllen Java Basics - Anfänger-Themen 4
O JScrollPane zu gross für JTable Java Basics - Anfänger-Themen 2
L JTable Row selected -> fireTableDataChange do nothing. Java Basics - Anfänger-Themen 3
E JTable + TableModel updaten? Java Basics - Anfänger-Themen 1
O java.lang.IndexOutOfBoundsException JTable autoSort Java Basics - Anfänger-Themen 5
F JTable adding Row Java Basics - Anfänger-Themen 5
P jTable getColumnClass, mit unterschiedlichen Klassen in einer Column? Java Basics - Anfänger-Themen 5
M Eingabe in JTable bei Eingabe korrigieren Java Basics - Anfänger-Themen 2
Z jtable problem (das tausendste??) Java Basics - Anfänger-Themen 12
J JTable Java Basics - Anfänger-Themen 7
T JTable Java Basics - Anfänger-Themen 2
T JTable einzelne Zeilen löschen Java Basics - Anfänger-Themen 3
S Farbe eine Zeile in JTable ändern, wenn JButton geklickt wurd Java Basics - Anfänger-Themen 4
Uzi21 jTable / Inhalt speichern Java Basics - Anfänger-Themen 2
M Problem mit JTable und Model Java Basics - Anfänger-Themen 3
F Methoden JTable + 2 For-Schleifen Java Basics - Anfänger-Themen 4
C jtextfield und jtable Java Basics - Anfänger-Themen 34
X JTable mit Inhalten aus JTextField o.ä. füllen Java Basics - Anfänger-Themen 4
G JTable: SelectionListener Problem Java Basics - Anfänger-Themen 2
S Icons in JTable per ResultSet Java Basics - Anfänger-Themen 5
G Spalte in JTable unsichtbar machen, Zugriff auf Daten ermöglichen Java Basics - Anfänger-Themen 2
M Zelle von JTable mit Rahmen versehen Java Basics - Anfänger-Themen 4
G JTable: Inhalt einer selektierten Zeile speichern Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben