Wieder JTable :/ (Daten aktualisieren)

IcocaI

Mitglied
Hallo Leute,

ich versuch schon seit 1 Tag alles mögliche, um die JTable zu aktualisieren :/ ... hab auch im Internet viel gesucht und viel gefunden .. aber irgendwie wills immer noch nicht klappen ... ich habs dem listener hinzugefügt, ich hab mein eigenes tablemodel erstellt .. und und und ... am anfang bin ich bin ich erstmal systematisch rangegangen .. aber jetzt probier ich alles nur aus :/ ... langsam weiß ich auch nicht mehr weiter :/

ich bin wenigstens froh, dass ich die tabelle am anfang anzeigen konnte ... ach und die daten hole ich mit statements.* aus ner MySQL DB und erhalte bei statements.selectAllTeilnehmer einen Vector wieder die gefüllt sind. Programmieren macht spaß wenns funktioniert ^^ ... naja bin deprimiert :/ ..

Java:
package de.poker.layout;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.Vector;

import javax.swing.BorderFactory;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import org.jdesktop.application.Application;
import org.w3c.dom.views.AbstractView;

import de.poker.Statements;

/**
 * This code was edited or generated using CloudGarden's Jigloo
 * SWT/Swing GUI Builder, which is free for non-commercial
 * use. If Jigloo is being used commercially (ie, by a corporation,
 * company or business for any purpose whatever) then you
 * should purchase a license for each developer using Jigloo.
 * Please visit www.cloudgarden.com for details.
 * Use of Jigloo implies acceptance of these licensing terms.
 * A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
 * THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
 * LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
 */
/**
 * Example of components laid out in a grid
 */
public class Teilnehmerverwaltunglayout extends javax.swing.JFrame implements
		WindowListener, ActionListener{

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

	private JPanel jPanel = null;
	private JButton bOK = null;
	private JSeparator jSeparator1;
	private JTextField jTextFieldBezahlt;
	private JTextField jTextFieldGeburtsdatum;
	private JButton bAbbrechen = null;
	private JButton bHinzufuegen = null;
	private JTable jTableTeilnehmer;
	private JScrollPane jScrollPaneTeilnehmer;
	private Statements statements;
	private DefaultTableModel jTableModelTeilnehmer = null;
	private JTextField jTextFieldVorname;
	private JTextField jTextFieldName;
	private JTextField jTextFieldID;
	private Vector selectallteilnehmer;
	private Vector<String> columnNames = new Vector<String>(4);

	public Vector<String> setColumnName() {
		columnNames.add(new String("ID"));
		columnNames.add(new String("Name"));
		columnNames.add(new String("Vorname"));
		// columnNames.add(new String("TurnierID"));
		columnNames.add(new String("Geburtsdatum"));
		columnNames.add(new String("Bezahlt"));
		return columnNames;
	}

	public Teilnehmerverwaltunglayout(Statements statements) {
		super();
		this.statements = statements;
		selectallteilnehmer = statements.selectAllTeilnehmer();
		initialize();
	}

	/**
	 * Initialize the class.
	 */
	private void initialize() {

		this.setName("JFrame1");
		this.setContentPane(getJPanel());
		this
				.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
		this.setBounds(45, 25, 525, 370);
		this.setTitle("Teilnehmerverwaltung");
		pack();
		Application.getInstance().getContext().getResourceMap(getClass())
				.injectComponents(getContentPane());
	}

	/**
	 * This method initializes jPanel
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getJPanel() {
		if (jPanel == null) {
			jPanel = new JPanel();
			jPanel.setLayout(null);
			jPanel.setPreferredSize(new java.awt.Dimension(525, 370));
			jPanel.add(getBOK(), null);
			jPanel.add(getBAbbrechen(), null);
			jPanel.add(getBHinzufuegen(), null);
			jPanel.add(getJScrollPaneTeilnehmer());
			jPanel.add(getJTextFieldID());
			jPanel.add(getJTextFieldName());
			jPanel.add(getJTextFieldVorname());
			jPanel.add(getJTextFieldGeburtsdatum());
			jPanel.add(getJTextFieldBezahlt());
			jPanel.add(getJSeparator1());
		}
		return jPanel;
	}

	/**
	 * This method initializes bOK
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getBOK() {
		if (bOK == null) {
			bOK = new JButton();
			bOK.setText("OK");
			bOK.setLocation(new java.awt.Point(396, 250));
			bOK.setBounds(398, 297, 100, 26);
			bOK.addActionListener(this);
		}
		return bOK;
	}

	/**
	 * This method initializes bAbbrechen
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getBAbbrechen() {
		if (bAbbrechen == null) {
			bAbbrechen = new JButton();
			bAbbrechen.setText("Abbrechen");
			bAbbrechen.setLocation(new java.awt.Point(289, 250));
			bAbbrechen.setBounds(292, 297, 100, 26);
			bAbbrechen.addActionListener(this);
		}
		return bAbbrechen;
	}

	/**
	 * This method initializes bHinzufuegen
	 * 
	 * @return javax.swing.JButton
	 */
	private JButton getBHinzufuegen() {
		if (bHinzufuegen == null) {
			bHinzufuegen = new JButton();
			bHinzufuegen.setText("+");
			bHinzufuegen.setLocation(new java.awt.Point(228, 250));
			bHinzufuegen.setBounds(236, 297, 50, 26);
			bHinzufuegen.addActionListener(this);
		}
		return bHinzufuegen;
	}

	private JScrollPane getJScrollPaneTeilnehmer() {
		if (jScrollPaneTeilnehmer == null) {
			jScrollPaneTeilnehmer = new JScrollPane();
			jScrollPaneTeilnehmer.setBounds(6, 6, 506, 238);
			jScrollPaneTeilnehmer.getVerticalScrollBar().setBorder(
					BorderFactory.createCompoundBorder(null, null));
			jScrollPaneTeilnehmer.setViewportView(getJTableTeilnehmer());
		}
		return jScrollPaneTeilnehmer;
	}

	private JTable getJTableTeilnehmer() {
		if (jTableTeilnehmer == null) {
			jTableModelTeilnehmer = new DefaultTableModel(
					getSelectAllTeilnehmer(), setColumnName());
			jTableTeilnehmer = new JTable();
			jTableTeilnehmer.setModel(jTableModelTeilnehmer);
			jTableTeilnehmer.setPreferredSize(new java.awt.Dimension(440,
					(16 * getSelectAllTeilnehmer().size())));
			jTableTeilnehmer.getTableHeader().setReorderingAllowed(false);
			jTableTeilnehmer.setAutoCreateRowSorter(true);
		}
		return jTableTeilnehmer;
	}

	public DefaultTableModel getjTableModelTeilnehmer() {
		return jTableModelTeilnehmer;
	}

	public void setjTableModelTeilnehmer(DefaultTableModel jTableModelTeilnehmer) {
		this.jTableModelTeilnehmer = jTableModelTeilnehmer;
	}

	public void aktualisiereTabelle() {

	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == bOK) {
			this.setVisible(false);
		}
		if (e.getSource() == bAbbrechen) {
			this.setVisible(false);
		}
		if (e.getSource() == bHinzufuegen) {
			statements.insertAllTeilnehmer(jTextFieldID.getText(),
					jTextFieldName.getText(), jTextFieldVorname.getText(),
					jTextFieldGeburtsdatum.getText(), jTextFieldBezahlt.getText());
			setSelectAllTeilnehmer(statements.selectAllTeilnehmer());
			
			
		}
//		repaint();
	}

	public Vector getSelectAllTeilnehmer() {
		return selectallteilnehmer;
	}

	public void setSelectAllTeilnehmer(Vector selectallteilnehmer) {
		this.selectallteilnehmer = selectallteilnehmer;
	}

	@Override
	public void windowActivated(WindowEvent e) {
		// TODO

	}

	@Override
	public void windowClosed(WindowEvent e) {
		// TODO

	}

	@Override
	public void windowClosing(WindowEvent e) {
		System.exit(0);
	}

	@Override
	public void windowDeactivated(WindowEvent e) {
		// TODO

	}

	@Override
	public void windowDeiconified(WindowEvent e) {
		// TODO

	}

	@Override
	public void windowIconified(WindowEvent e) {
		// TODO

	}

	@Override
	public void windowOpened(WindowEvent e) {
		// TODO

	}

	private JTextField getJTextFieldID() {
		if (jTextFieldID == null) {
			jTextFieldID = new JTextField();
			jTextFieldID.setBounds(15, 260, 90, 28);
			jTextFieldID.setName("jTextFieldID");
		}
		return jTextFieldID;
	}

	private JTextField getJTextFieldName() {
		if (jTextFieldName == null) {
			jTextFieldName = new JTextField();
			jTextFieldName.setBounds(115, 260, 90, 28);
			jTextFieldName.setName("jTextFieldName");
		}
		return jTextFieldName;
	}

	private JTextField getJTextFieldVorname() {
		if (jTextFieldVorname == null) {
			jTextFieldVorname = new JTextField();
			jTextFieldVorname.setBounds(210, 260, 90, 28);
			jTextFieldVorname.setName("jTextFieldVorname");
		}
		return jTextFieldVorname;
	}

	private JTextField getJTextFieldGeburtsdatum() {
		if (jTextFieldGeburtsdatum == null) {
			jTextFieldGeburtsdatum = new JTextField();
			jTextFieldGeburtsdatum.setBounds(305, 260, 90, 28);
			jTextFieldGeburtsdatum.setName("jTextFieldGeburtsdatum");
		}
		return jTextFieldGeburtsdatum;
	}

	private JTextField getJTextFieldBezahlt() {
		if (jTextFieldBezahlt == null) {
			jTextFieldBezahlt = new JTextField();
			jTextFieldBezahlt.setBounds(400, 260, 90, 28);
			jTextFieldBezahlt.setName("jTextFieldBezahlt");
		}
		return jTextFieldBezahlt;
	}

	private JSeparator getJSeparator1() {
		if (jSeparator1 == null) {
			jSeparator1 = new JSeparator();
			jSeparator1.setBounds(10, 252, 497, 8);
		}
		return jSeparator1;
	}

} // @jve:decl-index=0:visual-constraint="10,10"
 
Hi,

eigentlich sollte:
Code:
tablemodel.fireTableDataChanged()
table.repaint();
zum Erfolg führen.
Hab es aber nicht ausprobiert.

Gruß
Erik
 
hi ^^

das hab ich eigentlich auch gedacht ...
aber es klappt nicht ...

wenn ich in der db was hinzufüge, mache ich danach eine neue select auf die db und erhalte wieder alle daten die in nem vector gespeichert werden ...
die daten muss ich ja dem model wieder neu hinzufügen, überschreiben oder was auch immer ... und dann der tabelle übergeben ...
wenn ichs so mache, wird die erstet tabelle aktualisiert aber es erstellt zugleich wieder eine neue tabelle und hängt diese dann rechts mit leeren felder dran ..
 
@IcocaI: Klemmt deine "."-Taste? Oder warum folgt zu jedem Satzende diese inflationäre Anzahl?

Und vernachlässige die Shift-Taste nicht, um halbwegs groß- und kleinzuschreiben, wie in der Netiquette erwünscht - vielen Dank! :)

mfg Maik
 
Hi,
das mit den Punkten hab ich mir angewöhnt ^^
aber ich denke, dass ist nicht so schlimm
ansonsten versuch ich auf groß und klein Schreibung zu achten . danke für den Hinweiß :)
 
so sieht die Oberfläche dazu aus ... unten werden die daten eingegeben und mit " + " in die DB hineingeschrieben ... danach wird ein select auf die Tabelle gemacht, wo ich alle Datensätze bekomme und als Rückgabewert ein Vector bekomme. Das klappt auch wunder bar ... nur möcht ich das Ergebnis des Selects anzeigen lassen ... Da ich ja nichts im TableModel was geändert habe muss ichs ja irgendwie anders lösen :/ ... ich verstehs nicht ...
 

Anhänge

  • test.jpg
    test.jpg
    41,9 KB · Aufrufe: 36
Hi,
das mit den Punkten hab ich mir angewöhnt ^^
aber ich denke, dass ist nicht so schlimm
ansonsten versuch ich auf groß und klein Schreibung zu achten . danke für den Hinweiß :)

Hallo,

es scheint wohl bei dem Versuch zu bleiben, da es dir irgendwie nicht so gut gelingt. Deshalb bitte ich dich doch etwas mehr noch auf Groß- und Kleinschreibung zu achten. Punkte gehören dann auch ans Satzende. Du möchtest ja immerhin, dass dir jemand hilft und wenn man sich schon bemühen muss, den Text zu lesen, mag man auch nicht helfen.

Threadpushing ist hier im Forum auch nicht erlaubt. Wenn es mal Tage später ist, sagt keiner was, aber nicht nach nicht mal einer Stunde.

Dann wäre es mal gut, wenn du dein Problem mal etwas genauer beschreibst. Irgendwie kommt nämlich nicht klar rüber was genau du machen möchtest und dann in deiner Oberfläche passieren soll.

Gruß

Sascha
 
Hi, so wie ich das sehe, ist das Problem, dass beim Hinzufügen eines Datensatzes der Vektor "selectallteilnehmer" aktualisiert wird, damit wird aber nicht gleichzeitig der Vektor des TableModels mitaktualisiert. Sprich du müsstest entweder den Datensatz dem Vektor des TableModels den Datensatz hinzufügen, oder was einfacher ist, einfach den Vektor mit deinem aktualisierten Vektor überschreiben.

Dazu ein kurzes Beispiel, wie es auch bei mir funktioniert:

Java:
((DefaultTableModel)getJTableTeilnehmer().getModel()).setDataVector(getSelectAllTeilnehmer(), setColumnName());
// Cast ist notwendig, da getModel() nur ein Objekt vom Typ TableModel zurückgibt, 
// aber nur DefaultTableModel die Funktion "void setDataVector(Vector dataVector, Vector columnIdentifiers)" anbietet
 
Zurück