JTable Feldwerte in JTextFelder mit blättern

Status
Nicht offen für weitere Antworten.

Aruhn

Mitglied
Hallo Java Forum,
ich stehe vor einem weiteren großen Problem, dessen Klärung mir nicht so richtig einfallen will. Ich brauch also wieder einmal Anstöße und Hilfe. :)

Zum Konzept.
Ich habe ein größeres Mitarbeiter Formular erstellt, in dem sich ein Suchenpanel, Bearbeitenpanel und Erstellenpanel befindet.
In der unteren Bildhälfte wird die von der Datenbank zur Orientierung ausgelesene Tabelle angezeigt.
Ich möchte die einzelnen Datensätze bearbeiten können, will dies aber nicht in der Tabelle direkt machen sondern mittels einem Bearbeiten-Fomular, das aus mehreren Textfeldern besteht.
Das jeweilige Textfeld (z.B. Name), soll den entsprechenden Datensatz der Tabelle beinhalten.
Desweiteren möchte mit einem Button "Weiter" und "Zurück" durch die Datensätze scrollen können, der Inhalt in den Textfeldern soll sich dann entsprechend ändern.
In der Tabelle soll sich eine entsprechende Markierung finden die anzeigt welcher Datensatz gerade ausgewählt ist (es muss nichts besonders schickes sein) aber spätestens hier weiß ich dann gar nicht weiter.

Das MitarbeiterPanel wird in eine JTabbedPane in einer anderen Klasse geladen, wo es keine weiteren Haken gibt.
Das sind folgende Überlegungen die ich angestellt habe:

MitarbeiterPanel
Java:
public class MitarbeiterPanel
extends JPanel
implements ActionListener
{
	//Eingabe-Attribute
	private JLabel lblInfo;
	private JFormattedTextField ftfBearbMitarbNr, ftfErstMitarbNr;
	private JTextField txtBearbName, txtErstName;
	private JTextField txtBearbVorname, txtErstVorname;
	private JTextField txtBearbStrasse, txtErstStrasse;
	private JTextField txtBearbOrt, txtErstOrt;
	private JFormattedTextField ftfBearbPLZ, ftfErstPLZ;
	private JFormattedTextField ftfBearbTel, ftfErstTel;
	private JTextField txtBearbEmail, txtErstEmail;

	//Suchen Attribute
	private JFormattedTextField ftfSuchMitarbNr;
	private JTextField txtSuchName;
	private JTextField txtSuchVorname;

	private JTable tblAnzeige;

	//Buttons
	private JButton btnErstellen;
	private JButton btnBearbeiten;
	private JButton btnLoeschen;
	private JButton btnZurueck, btnWeiter;

	//Tabellen Attribute
	private Vector spaltenNamen = new Vector();
	private Vector daten = new Vector();

	//Klassen
	private DBConnect dbc = new DBConnect();

	//Zaehlvariable
	Zaehler z = new Zaehler();


	public MitarbeiterPanel()
	{
		//Layout festlegen für alle Panels, einschließlich
		//Hauptpanel
		GridBagLayout gridbag = new GridBagLayout();
		GridBagConstraints gdc = new GridBagConstraints();
		gdc.fill = GridBagConstraints.BOTH;
		gdc.insets = new Insets(5,5,5,5);

		//Layout für das Bearbeiten
		JPanel bearbeiten = new JPanel();
		bearbeiten.setLayout(gridbag);
		bearbeiten.setBorder(new TitledBorder("Dienstleister Bearbeiten"));
		lblInfo = new JLabel("Mitarbeiter Nr.");
		gdc.gridx = 0;	gdc.gridy = 0;
		bearbeiten.add(lblInfo, gdc);
		ftfBearbMitarbNr = new JFormattedTextField("#####");
		gdc.gridx = 1; gdc.gridy = 0;
		bearbeiten.add(ftfBearbMitarbNr, gdc);
		lblInfo = new JLabel("Nachname");
		gdc.gridx = 0; gdc.gridy = 1;
		bearbeiten.add(lblInfo, gdc);
		txtBearbName = new JTextField(10);
		gdc.gridx = 1; gdc.gridy = 1;
		bearbeiten.add(txtBearbName, gdc);
		lblInfo = new JLabel("Vorname");
		gdc.gridx = 0;	gdc.gridy = 2;
		bearbeiten.add(lblInfo, gdc);
		txtBearbVorname = new JTextField(10);
		gdc.gridx = 1;	gdc.gridy = 2;
		bearbeiten.add(txtBearbVorname, gdc);
		lblInfo = new JLabel("Strasse");
		gdc.gridx = 0; gdc.gridy = 3;
		bearbeiten.add(lblInfo, gdc);
		txtBearbStrasse = new JTextField(10);
		gdc.gridx = 1; gdc.gridy = 3;
		bearbeiten.add(txtBearbStrasse, gdc);
		lblInfo = new JLabel("PLZ");
		gdc.gridx = 0;	gdc.gridy = 4;
		bearbeiten.add(lblInfo, gdc);
		ftfBearbPLZ = new JFormattedTextField("#####");
		gdc.gridx = 1;	gdc.gridy = 4;
		bearbeiten.add(ftfBearbPLZ, gdc);
		lblInfo = new JLabel("Ort");
		gdc.gridx = 0;	gdc.gridy = 5;
		bearbeiten.add(lblInfo, gdc);
		txtBearbOrt = new JTextField(10);
		gdc.gridx = 1;	gdc.gridy = 5;
		bearbeiten.add(txtBearbOrt, gdc);
		lblInfo = new JLabel("Telefon");
		gdc.gridx = 0;	gdc.gridy = 6;
		bearbeiten.add(lblInfo, gdc);
		ftfBearbTel = new JFormattedTextField();
		gdc.gridx = 1;	gdc.gridy = 6;
		bearbeiten.add(ftfBearbTel, gdc);
		lblInfo = new JLabel("eMail");
		gdc.gridx = 0;	gdc.gridy = 7;
		bearbeiten.add(lblInfo, gdc);
		txtBearbEmail = new JTextField(10);
		gdc.gridx = 1;	gdc.gridy = 7;
		bearbeiten.add(txtBearbEmail, gdc);

		// === Layout für das Erstellen eines Mitarbeiters ===

		JPanel erstellen = new JPanel();
		erstellen.setLayout(gridbag);
		erstellen.setBorder(new TitledBorder("Dienstleister Erstellen"));
		lblInfo = new JLabel("Mitarbeiter Nr.");
		gdc.gridx = 0;
		gdc.gridy = 0;
		erstellen.add(lblInfo, gdc);
		ftfErstMitarbNr = new JFormattedTextField("#####");
		gdc.gridx = 1;
		gdc.gridy = 0;
		erstellen.add(ftfErstMitarbNr, gdc);
		lblInfo = new JLabel("Nachname");
		gdc.gridx = 0;
		gdc.gridy = 1;
		erstellen.add(lblInfo, gdc);
		txtErstName = new JTextField(10);
		gdc.gridx = 1;
		gdc.gridy = 1;
		erstellen.add(txtErstName, gdc);
		lblInfo = new JLabel("Vorname");
		gdc.gridx = 0;
		gdc.gridy = 2;
		erstellen.add(lblInfo, gdc);
		txtErstVorname = new JTextField(10);
		gdc.gridx = 1;
		gdc.gridy = 2;
		erstellen.add(txtErstVorname, gdc);
		lblInfo = new JLabel("Strasse");
		gdc.gridx = 0;
		gdc.gridy = 3;
		erstellen.add(lblInfo, gdc);
		txtErstStrasse = new JTextField(10);
		gdc.gridx = 1;
		gdc.gridy = 3;
		erstellen.add(txtErstStrasse, gdc);
		lblInfo = new JLabel("PLZ");
		gdc.gridx = 0;
		gdc.gridy = 4;
		erstellen.add(lblInfo, gdc);
		ftfErstPLZ = new JFormattedTextField("#####");
		gdc.gridx = 1;
		gdc.gridy = 4;
		erstellen.add(ftfErstPLZ, gdc);
		lblInfo = new JLabel("Ort");
		gdc.gridx = 0;
		gdc.gridy = 5;
		erstellen.add(lblInfo, gdc);
		txtErstOrt = new JTextField(10);
		gdc.gridx = 1;
		gdc.gridy = 5;
		erstellen.add(txtErstOrt, gdc);
		lblInfo = new JLabel("Telefon");
		gdc.gridx = 0;
		gdc.gridy = 6;
		erstellen.add(lblInfo, gdc);
		ftfErstTel = new JFormattedTextField();
		gdc.gridx = 1;
		gdc.gridy = 6;
		erstellen.add(ftfErstTel, gdc);
		lblInfo = new JLabel("eMail");
		gdc.gridx = 0;
		gdc.gridy = 7;
		erstellen.add(lblInfo, gdc);
		txtErstEmail = new JTextField(10);
		gdc.gridx = 1;
		gdc.gridy = 7;
		erstellen.add(txtErstEmail, gdc);
		btnErstellen = new JButton("Erstellen");

		// === Panel Button für Mitarbeiter erstellen ===
		JPanel erstellenBtn = new JPanel();
		erstellenBtn.setLayout(gridbag);
		erstellenBtn.setBorder(BorderFactory.createLoweredBevelBorder());
		gdc.gridx = 0; gdc.gridy = 0;
		erstellenBtn.add(btnErstellen);

		//=== Panel für das Suchenfeld ===

		JPanel suchen = new JPanel();
		suchen.setLayout(gridbag);
		suchen.setBorder(new TitledBorder("Suchen"));
		ftfSuchMitarbNr = new JFormattedTextField("#####");
		txtSuchName = new JTextField(10);
		txtSuchVorname = new JTextField(10);
		lblInfo = new JLabel("Nr.");
		gdc.gridx = 0;
		gdc.gridy = 0;
		suchen.add(lblInfo, gdc);
		gdc.gridx = 1;
		gdc.gridy = 0;
		suchen.add(ftfSuchMitarbNr, gdc);
		lblInfo = new JLabel("Name");
		gdc.gridx = 0;
		gdc.gridy = 1;
		suchen.add(lblInfo, gdc);
		gdc.gridx = 1;
		gdc.gridy = 1;
		suchen.add(txtSuchName, gdc);
		lblInfo = new JLabel("Vorname");
		gdc.gridx = 0;
		gdc.gridy = 2;
		suchen.add(lblInfo, gdc);
		gdc.gridx = 1;
		gdc.gridy = 2;
		suchen.add(txtSuchVorname, gdc);

		//=== Panel für den Suchen Button ===

		//=== Panel für das Aktionfeld für Bearbeiten ===

		JPanel aktiontitelpanel = new JPanel();
		aktiontitelpanel.setBorder(new TitledBorder("Bearbeiten Aktionfeld"));
		JPanel aktionfeld = new JPanel();
		btnBearbeiten = new JButton("Bearbeiten");
		btnLoeschen = new JButton("Loeschen");
		btnWeiter = new JButton(">");
		btnWeiter.addActionListener(this);
		btnZurueck = new JButton("<");
		btnZurueck.addActionListener(this);
		aktionfeld.setLayout(gridbag);
		aktionfeld.setBorder(BorderFactory.createLoweredBevelBorder());
		gdc.gridx = 0;
		gdc.gridy = 0;
		aktionfeld.add(btnBearbeiten, gdc);
		gdc.gridx = 1;
		gdc.gridy = 0;
		aktionfeld.add(btnLoeschen, gdc);
		gdc.gridx = 0;
		gdc.gridy = 1;
		aktionfeld.add(btnZurueck, gdc);
		gdc.gridx = 1;
		gdc.gridy = 1;
		aktionfeld.add(btnWeiter, gdc);
		aktiontitelpanel.add(aktionfeld);

		// <<< DATABASE - Mitarbeitertabelle >>>
		try {
			String sql = "SELECT * FROM Mitarbeiter";
			Statement stmt = dbc.getDatabaseConnection().createStatement();
			ResultSet rs = stmt.executeQuery(sql);
			ResultSetMetaData rsmd =  rs.getMetaData();

			int columns = rsmd.getColumnCount();
			//Spalten Name
			for(int i = 1; i <= columns; i++) {
				spaltenNamen.addElement(rsmd.getColumnName(i));
			}
			//Zeilen
			while(rs.next()) {
				Vector zeilen = new Vector(columns);
				for(int i = 1; i <= columns; i++ ) {
					zeilen.addElement(rs.getObject(i));
				}
				daten.addElement(zeilen);
			}
			rs.close();
			stmt.close();

		} catch (Exception ex) {
			System.out.println(ex);
		}
		tblAnzeige = new JTable(daten, spaltenNamen);
		JScrollPane scrolltabelle = new JScrollPane(tblAnzeige);


		/*
		 * Hauptpanel - die ganzen Panels werden in einem Haupt GridBagLayout
		 * zusammengepickt
		 */
		JPanel hauptpanel = new JPanel();
		hauptpanel.setLayout(gridbag);
		gdc.gridx = 0;
		gdc.gridy = 0;
		hauptpanel.add(suchen, gdc);
		gdc.gridx = 1;
		gdc.gridy = 0;
		hauptpanel.add(bearbeiten, gdc);
		gdc.gridx = 1;
		gdc.gridy = 1;
		hauptpanel.add(aktiontitelpanel, gdc);
		gdc.gridx = 2;
		gdc.gridy = 0;
		hauptpanel.add(erstellen, gdc);
		gdc.gridx = 2;
		gdc.gridy = 1;
		gdc.weighty = 0;
		hauptpanel.add(erstellenBtn, gdc);

		/* *** Das Hauptlayout alias BorderLayout *** */



		setLayout(new BorderLayout());
		add(hauptpanel, BorderLayout.NORTH);
		add(scrolltabelle, BorderLayout.CENTER);


	}


	public void actionPerformed(ActionEvent e)
	{


		if(e.getSource() == btnWeiter) {
			 //z.erhoeheZaehler();
		     ftfBearbMitarbNr.setText("" + z.getZaehler());

			try {
				String sql = "SELECT * FROM Mitarbeiter";
				Statement stmt = dbc.getDatabaseConnection().createStatement();
				ResultSet rs = stmt.executeQuery(sql);
				ResultSetMetaData rsmd =  rs.getMetaData();

				int columns = rsmd.getColumnCount();

//				Zeilen
				while(rs.next()) {
					Vector zeilen = new Vector(columns);
					for(int i = z.getZaehler(); ; i++ ) {
						txtBearbName.setText(rs.getString(i));
						//zeilen.addElement(rs.getObject(i));
					}
					//daten.addElement(zeilen);
				}
				rs.close();
				stmt.close();
			} catch (Exception ex) { }



		} else if (e.getSource() == btnZurueck) {
			System.out.println("Zurueck (< )");
		}

	}



}


DBConnect
Java:
public class DBConnect
{
	private String treiber = "net.sourceforge.jtds.jdbc.Driver";
	private String servertyp = "jdbc:jtds:sqlserver://";
	private String serveradresse = "192.168.1.6:1433/";
	private String datenbank = "Hausverwaltung";
	private String benutzer = "sa";


	protected DBConnect()
	{

	}

	public Connection getDatabaseConnection()
	{
		Connection con = null;
		try
		{
			Class.forName(treiber);

		}
		catch (ClassNotFoundException ex)
		{
			System.out.println("Kein Treiber gefunden");
		}

		try
		{
			return con = DriverManager.getConnection(servertyp+serveradresse+
					datenbank, benutzer, "" );
		}
		catch (SQLException ex)
		{
			System.out.println("Keine Serververbindung");
			return con;

		}

	}

}

Also in den jeweiligen Weiter und Zurück Buttons muss ich eine Zählschleife festlegen, die hoch bzw. runter gezählt wird. Folgende Überlegung hatte ich dafür gemacht:

Java:
public class Zaehler {
    private int zaehler;

    public Zaehler() {
        zaehler = 1;
    }

    public int getZaehler() {
        return zaehler;
    }

    public void erhoeheZaehler(){
        zaehler++;
    }
}

Wie kann ich nun den Wert der Tabelle in den TextFeldern bringen und blättern?
Wie bereits erwähnt, das soll auf jedes Feld unter dem Bearbeiten Panel ausgedehnt werden. So fragt sich natürlich auch, gleich mit einem eigenem TabellenModel zu arbeiten?

Für jede Hilfe wäre ich dankbar.

Zur weiteren Erklärung (um der Etablierung geht es jetzt erst einmal nicht):
Bei Suchen soll automatisch mit dem TextChanged Ereignis die Tabelle aktualisiert werden. Ist das Feld leer wird die gesamte Tabelle angezeigt. So zumindest die Theorie.
Bei Erstellen soll ein neuer Datensatz hinzugefügt werden.



Einen schönen Abend noch :)
 

Michael...

Top Contributor
Ich möchte die einzelnen Datensätze bearbeiten können, will dies aber nicht in der Tabelle direkt machen sondern mittels einem Bearbeiten-Fomular, das aus mehreren Textfeldern besteht.
Hast Dich wohl zulange mit Access oder ähnlichem rumschlagem müssen ;-)
Aber mal im Ernst: Wenn man schon eine Tabelle hat und anzeigt, ist es doch viel komfortabler Daten direkt in der Tabelle zu ändern. Beim Einfügen von komplett neuen Datensätzen kann ich ja noch verstehen, wenn man zur Eingabe ein Formular verwendet. Aber jeder wie er will:
getValue(int row, int column) von JTable oder dessen Model liefert ja den Inhalt der jeweiligen Zelle. Wenn man per Buttons navigiert, muss man einfach nur eine Zählvariable für die Zeile mitlaufen lassen und dann per getValue() in die entsprechenden Komponenten übertragen.
 

Aruhn

Mitglied
Die Frage die sich da mir stellt ist, was ist verständlich für den dümmsten anzunehmenden Nutzer? Ich persönlich würde da eine reine Tabelle als keinen guten Ansatz ansehen. Das Projekt ist nämlich nicht in erster Hinsicht für mich aber ich finds Klasse das du mir die Tabellen Alternative genannt und mich daran erinnert hast, Kollegen abseits vom IT Spektrum zu fragen wie man die Oberfläche am Besten gestalten sollte. :)

Dein Tipp hatte mich auch auf die richtige Fährte gebracht, ich hab das Problem des "Blätterns" soweit hinbekommen.
 

Aruhn

Mitglied
Ich habe neue Schwierigkeiten mit dem Setzen des Textes der Textfelder in Bezug mit dem Button "btnZurueck".
Wie im Ursprungsthread geschrieben ist eine Tabelle die Basis, wo ich mit zwei Buttons durch die Zeile blättere und die entsprechenden Spalteninhalte in den jeweiligen Textfeldern angezeigt wird.

Die Hauptklassendatei ist anders als bei meinem ersten Posting - deshalb werde ich sie noch einmal neu posten.
Es handelt sich um folgende Klassen:

Zaehlerklasse
Java:
public class Zaehler {
    private int zaehler;

    public Zaehler() {
        zaehler = getZaehler();
    }

    public int getZaehler() {
        return zaehler;
    }

    public void setZaehler(int zaehler)
    {
    	this.zaehler = zaehler;
    }

    public void erhoeheZaehler(){
        zaehler++;
    }

    public void reduziereZaehler()
    {
    	zaehler--;
    }
}

Die Klasse in der sich dann alles abspielt.
Java:
public class VorortverwalterPanel
extends JPanel
implements ActionListener
{
	//Attribute
	private String sql = "SELECT * FROM Vorortverwalter";

	//	Buttons
	private JLabel lblInfo;
	private JButton btnErstellen = new JButton("Erstellen");
	private JButton btnBearbeiten = new JButton("Bearbeiten");
	private JButton btnLoeschen = new JButton("Loeschen");
	private JButton btnWeiter = new JButton(">");
	private JButton btnZurueck = new JButton("<");
	private JButton btnVorn = new JButton("<|");
	private JButton btnHinten = new JButton("|>");
	private JButton btnZeigTblDialog = new JButton("Zeige Tabelle");

	//	Eingabefelder
	private JFormattedTextField ftfBearbVerwNr = new JFormattedTextField();
	private JFormattedTextField ftfBearbMitarbNr1 = new JFormattedTextField(new NumberFormatter());
	private JFormattedTextField ftfBearbMitarbNr2 = new JFormattedTextField(new NumberFormatter());
	private JFormattedTextField ftfBearbMitarbNr3 = new JFormattedTextField(new NumberFormatter());
	private JTextArea araBearbBemerkungen = new JTextArea();
	private JTextArea araErstBemerkungen = new JTextArea();
	private JFormattedTextField ftfErstVerwNr = new JFormattedTextField();
	private JFormattedTextField ftfErstMitarbNr1 = new JFormattedTextField(new NumberFormatter());
	private JFormattedTextField ftfErstMitarbNr2 = new JFormattedTextField(new NumberFormatter());
	private JFormattedTextField ftfErstMitarbNr3 = new JFormattedTextField(new NumberFormatter());

	//	Suchen
	private JFormattedTextField ftfSuchVerwNr = new JFormattedTextField();
	private JFormattedTextField ftfSuchMitarb1 = new JFormattedTextField();


	//Klassen
	DBConnect dbc = new DBConnect();
	Zaehler z = new Zaehler();
	DBUtils dbu = new DBUtils();
	DialogTabelleSuche dia_tbl = new DialogTabelleSuche();

	//Tabelle
	private JTable tblAusgabe;
	private JScrollPane scrolltabelle;

	public VorortverwalterPanel()
	{
		//Einrichten bestimmmter Felder
		ftfErstVerwNr.setEditable(false);
		ftfBearbVerwNr.setEditable(false);
		ftfErstVerwNr.setToolTipText("Automatisch generierende Vorortverwalter Identifikation");
		ftfErstMitarbNr1.setToolTipText("Nummer des Mitarbeiters angeben. Es werden nur Zahlen angenommen.");

		araErstBemerkungen.setRows(3);
		araErstBemerkungen.setLineWrap(true);
		araErstBemerkungen.setWrapStyleWord(true);
		araErstBemerkungen.setBorder(new LineBorder(Color.DARK_GRAY));
		araBearbBemerkungen.setRows(3);
		araBearbBemerkungen.setLineWrap(true);
		araBearbBemerkungen.setWrapStyleWord(true);
		araBearbBemerkungen.setBorder(new LineBorder(Color.DARK_GRAY));



		GridBagLayout gridbag = new GridBagLayout();
		GridBagConstraints gbc = new GridBagConstraints();
		gbc.fill = GridBagConstraints.BOTH;
		gbc.insets = new Insets(5,5,5,5);

		// === Panel Bearbeiten ===
		JPanel bearbeitenPanel = new JPanel();
		bearbeitenPanel.setLayout(gridbag);
		bearbeitenPanel.setBorder(new TitledBorder("Verwalter Bearbeiten"));



		lblInfo = new JLabel("Verwalter Nr.");
		gbc.gridx = 0;
		gbc.gridy = 0;
		bearbeitenPanel.add(lblInfo, gbc);
		gbc.gridx = 1;
		gbc.gridy = 0;
		bearbeitenPanel.add(ftfBearbVerwNr, gbc);
		lblInfo = new JLabel("Mitarbeiter 1");
		gbc.gridx = 0;
		gbc.gridy = 1;
		bearbeitenPanel.add(lblInfo, gbc);
		gbc.gridx = 1;
		gbc.gridy = 1;
		bearbeitenPanel.add(ftfBearbMitarbNr1, gbc);
		lblInfo = new JLabel("Mitarbeiter 2");
		gbc.gridx = 0;
		gbc.gridy = 2;
		bearbeitenPanel.add(lblInfo, gbc);
		gbc.gridx = 1;
		gbc.gridy = 2;
		bearbeitenPanel.add(ftfBearbMitarbNr2, gbc);
		lblInfo = new JLabel("Mitarbeiter 3");
		gbc.gridx = 0;
		gbc.gridy = 3;
		bearbeitenPanel.add(lblInfo, gbc);
		gbc.gridx = 1;
		gbc.gridy = 3;
		bearbeitenPanel.add(ftfBearbMitarbNr3, gbc);
		lblInfo = new JLabel("Bemerkungen");
		gbc.gridx = 0;
		gbc.gridy = 4;
		bearbeitenPanel.add(lblInfo, gbc);
		gbc.gridx = 1;
		gbc.gridy = 4;
		gbc.gridheight = 2;
		bearbeitenPanel.add(araBearbBemerkungen, gbc);

		//--Panel für das Aktionfeld Bearbeiten --
		JPanel aktiontitelPanel = new JPanel();
		aktiontitelPanel.setBorder(new TitledBorder("Bearbeiten Aktionen"));
		JPanel aktionPanel = new JPanel();
		aktionPanel.setLayout(gridbag);
		aktionPanel.setBorder(BorderFactory.createLoweredBevelBorder());
		gbc.gridx = 0;
		gbc.gridy = 0;
		btnZurueck.addActionListener(this);
		aktionPanel.add(btnZurueck, gbc);
		gbc.gridx = 1;
		gbc.gridy = 0;
		btnWeiter.addActionListener(this);
		aktionPanel.add(btnWeiter, gbc);
		gbc.gridx = 0;
		gbc.gridy = 2;
		btnVorn.addActionListener(this);
		aktionPanel.add(btnVorn, gbc);
		gbc.gridx = 1;
		gbc.gridy = 2;
		btnHinten.addActionListener(this);
		aktionPanel.add(btnHinten, gbc);
		gbc.gridx = 0;
		gbc.gridy = 4;
		btnBearbeiten.addActionListener(this);
		aktionPanel.add(btnBearbeiten, gbc);
		gbc.gridx = 1;
		gbc.gridy = 4;
		btnLoeschen.addActionListener(this);
		aktionPanel.add(btnLoeschen, gbc);
		aktiontitelPanel.add(aktionPanel);


		//---Erstellen---
		JPanel erstellenPanel = new JPanel();
		erstellenPanel.setLayout(gridbag);
		erstellenPanel.setBorder(new TitledBorder("Verwalter Erstellen"));


		lblInfo = new JLabel("Verwalter Nr.");
		gbc.gridx = 0;
		gbc.gridy = 0;
		erstellenPanel.add(lblInfo, gbc);
		gbc.gridx = 1;
		gbc.gridy = 0;
		erstellenPanel.add(ftfErstVerwNr, gbc);
		lblInfo = new JLabel("Mitarbeiter 1");
		gbc.gridx = 0;
		gbc.gridy = 2;
		erstellenPanel.add(lblInfo, gbc);
		gbc.gridx = 1;
		gbc.gridy = 2;
		erstellenPanel.add(ftfErstMitarbNr1, gbc);
		lblInfo = new JLabel("Mitarbeiter 2");
		gbc.gridx = 0;
		gbc.gridy = 4;
		erstellenPanel.add(lblInfo, gbc);
		gbc.gridx = 1;
		gbc.gridy = 4;
		erstellenPanel.add(ftfErstMitarbNr2, gbc);
		lblInfo = new JLabel("Mitarbeiter 3");
		gbc.gridx = 0;
		gbc.gridy = 6;
		erstellenPanel.add(lblInfo, gbc);
		gbc.gridx = 1;
		gbc.gridy = 6;
		erstellenPanel.add(ftfErstMitarbNr3, gbc);
		lblInfo = new JLabel("Bemerkungen");
		gbc.gridx = 0;
		gbc.gridy = 8;
		erstellenPanel.add(lblInfo, gbc);
		gbc.gridx = 1;
		gbc.gridy = 8;
		gbc.gridheight = 2;
		erstellenPanel.add(araErstBemerkungen, gbc);

		//-- Erstellen Btn Panel ---
		JPanel erstellenBtn = new JPanel();
		erstellenBtn.setLayout(gridbag);
		erstellenBtn.setBorder(BorderFactory.createLoweredBevelBorder());
		gbc.gridx = 0; gbc.gridy = 0;
		btnErstellen.addActionListener(this);
		erstellenBtn.add(btnErstellen, gbc);
		gbc.gridx = 0; gbc.gridy = 2;
		btnZeigTblDialog.addActionListener(this);
		erstellenBtn.add(btnZeigTblDialog, gbc);


		//---Hauptpanel, alles wird zusammengeführt---
		JPanel panel = new JPanel();
		panel.setLayout(gridbag);
		lblInfo = new JLabel("Sektion Vorortverwalter");
		gbc.gridx = 1;
		gbc.gridy = 0;
		//gbc.CENTER;
		panel.add(lblInfo, gbc);
		gbc.gridx = 1;
		gbc.gridy = 2;
		panel.add(bearbeitenPanel, gbc);
		gbc.gridx = 1;
		gbc.gridy = 4;
		panel.add(aktiontitelPanel, gbc);
		gbc.gridx = 2;
		gbc.gridy = 2;
		panel.add(erstellenPanel, gbc);
		gbc.gridx = 2;
		gbc.gridy = 4;
		panel.add(erstellenBtn, gbc);

		// << Verwalter Datenbanktabelle >>
		try {

			Statement stmt = dbc.getDatabaseConnection().createStatement();
			ResultSet rs = stmt.executeQuery(sql);

			tblAusgabe = new JTable(DBUtils.resultSetToTableModel(rs));
		} catch (Exception ex) {
			System.out.println(ex);
		}
		scrolltabelle = new JScrollPane(tblAusgabe);


		//===Die Oberfläche===
		setLayout(new BorderLayout());
		add(panel, BorderLayout.CENTER);
		add(scrolltabelle, BorderLayout.SOUTH);
	}

	public void actionPerformed(ActionEvent e)
	{
		if(e.getSource() == btnErstellen)
		{
			int laenge_mitarbnr1 = ftfErstMitarbNr1.getText().length();
			int laenge_mitarbnr2 = ftfErstMitarbNr2.getText().length();
			int laenge_mitarbnr3 = ftfErstMitarbNr3.getText().length();

			try
			{
				if(laenge_mitarbnr3 == 0 || laenge_mitarbnr2 == 0 || laenge_mitarbnr1 == 0)
				{
					JOptionPane.showMessageDialog(null, "Bitte vervollständigen Sie die Angaben!");

				} else {
					String sql = "INSERT INTO Vorortverwalter(erster_mitarb," +
					"zweiter_mitarb, dritter_mitarb,bemerkungen) VALUES (";
					sql += ftfErstMitarbNr1.getText();
					sql += ", " + ftfErstMitarbNr2.getText() + ", ";
					sql += ftfErstMitarbNr3.getText() + ", '" + araErstBemerkungen.getText() + "')";
					System.out.println(sql);

					Statement stmt = dbc.getDatabaseConnection().createStatement();
					stmt.execute(sql);
					tblAusgabe = dbu.showTabelle("SELECT * FROM Vorortverwalter");
					scrolltabelle.setViewportView(tblAusgabe);
					scrolltabelle.revalidate();
					scrolltabelle.repaint();
					stmt.close();

					ftfErstMitarbNr1.setText("");
					ftfErstMitarbNr2.setText("");
					ftfErstMitarbNr3.setText("");
					araErstBemerkungen.setText("");
				}
			}
			catch (Exception ex)
			{
				JOptionPane.showMessageDialog(null, "Überprüfen Sie ob die Mitarbeiter Nr. übereinstimmen.");
			}
		} else if (e.getSource() == btnZeigTblDialog) {
			dia_tbl.pack();
			dia_tbl.setVisible(true);
			dia_tbl.setModal(true);

		} else if (e.getSource() == btnLoeschen) {
			int messagebox = JOptionPane.showConfirmDialog(null,
					"Wollen Sie die Vorortverwalter-Gruppe wirklich löschen?",
					"Löschen Bestätigen", JOptionPane.YES_NO_OPTION,
					JOptionPane.QUESTION_MESSAGE);

			try
			{
				String lsql = "DELETE FROM Vorortverwalter WHERE verw_nr = ";
				lsql += ftfBearbVerwNr.getText();
				Statement stmt = dbc.getDatabaseConnection().createStatement();
				if(messagebox == JOptionPane.YES_OPTION) {
					stmt.execute(lsql);
					tblAusgabe = dbu.showTabelle(sql);
					scrolltabelle.setViewportView(tblAusgabe);
					scrolltabelle.revalidate();
					scrolltabelle.repaint();
				}
			}
			catch (Exception ex)
			{
				JOptionPane.showMessageDialog(null, "Auswahl konnte nicht gelöscht werden!");
			}

		} else if (e.getSource() == btnBearbeiten) {

		} else if (e.getSource() == btnWeiter) {
			int maxrow = tblAusgabe.getRowCount() - 1;
			Object obj;
			//System.out.println(z.getZaehler());

			for(int i = 0; i <= z.getZaehler() && i <= maxrow; ++i) {
				obj = tblAusgabe.getValueAt(i, 0);
				ftfBearbVerwNr.setText(obj + "");
				obj = tblAusgabe.getValueAt(i, 1);
				ftfBearbMitarbNr1.setText(obj + "");
				obj = tblAusgabe.getValueAt(i, 2);
				ftfBearbMitarbNr2.setText(obj + "");
				obj = tblAusgabe.getValueAt(i, 3);
				ftfBearbMitarbNr3.setText(obj + "");
				obj = tblAusgabe.getValueAt(i, 4);
				araBearbBemerkungen.setText(obj + "");
			}
			if(z.getZaehler() <= maxrow)
			{
				z.erhoeheZaehler();
			}


		} else if (e.getSource() == btnZurueck) {
			int minrow = 0;
			int maxrow = tblAusgabe.getRowCount() - 1;
			Object obj;

			System.out.println(z.getZaehler());

			if(z.getZaehler() >= 1)
			{
				z.reduziereZaehler();
			}

			for(int i = z.getZaehler() ; i >= minrow && i <= maxrow; i-- ) {
				obj = tblAusgabe.getValueAt(i, 0);
				ftfBearbVerwNr.setText(obj + "");
				obj = tblAusgabe.getValueAt(i, 1);
				ftfBearbMitarbNr1.setText(obj + "");
				obj = tblAusgabe.getValueAt(i, 2);
				ftfBearbMitarbNr2.setText(obj + "");
				obj = tblAusgabe.getValueAt(i, 3);
				ftfBearbMitarbNr3.setText(obj + "");
				obj = tblAusgabe.getValueAt(i, 4);
				araBearbBemerkungen.setText(obj + "");

				//System.out.println("Zaehler:" + i + "\n ----------");
			}


		} else if (e.getSource() == btnHinten) {
			int maxrow = tblAusgabe.getRowCount() - 1;
			Object obj;

			obj = tblAusgabe.getValueAt(maxrow, 0);
			ftfBearbVerwNr.setText(obj + "");
			obj = tblAusgabe.getValueAt(maxrow, 1);
			ftfBearbMitarbNr1.setText(obj + "");
			obj = tblAusgabe.getValueAt(maxrow, 2);
			ftfBearbMitarbNr2.setText(obj + "");
			obj = tblAusgabe.getValueAt(maxrow, 3);
			ftfBearbMitarbNr3.setText(obj + "");
			obj = tblAusgabe.getValueAt(maxrow, 4);
			araBearbBemerkungen.setText(obj + "");

			z.setZaehler(maxrow);

		} else if (e.getSource() == btnVorn) {
			z.setZaehler(0);
			int row = z.getZaehler();
			Object obj;

			obj = tblAusgabe.getValueAt(row, 0);
			ftfBearbVerwNr.setText(obj + "");
			obj = tblAusgabe.getValueAt(row, 1);
			ftfBearbMitarbNr1.setText(obj + "");
			obj = tblAusgabe.getValueAt(row, 2);
			ftfBearbMitarbNr2.setText(obj + "");
			obj = tblAusgabe.getValueAt(row, 3);
			ftfBearbMitarbNr3.setText(obj + "");
			obj = tblAusgabe.getValueAt(row, 4);
			araBearbBemerkungen.setText(obj + "");

		}

	}

}

Mit den nach Vornblättern gibt es keine Schwierigkeiten. Die Inhalte der Textboxen werden zumindest korrekt verändert.
Auch das nach ganz Vorn oder nach ganz Hinten springen der Tabelle haut hin.
Nur das Zurückblättern will einfach nicht funktionieren.

Mit dem herumhantieren der System.out.println(z.getZaehler()) bei den jeweiligen Buttons hab ich festgestellt das der Zähler auch hoch und runter gezählt bzw. gesetzt wird (und ich nicht über das Array komme).
Nur leider, sobald ich den Zurück Button klicke, wird in den Textfeldern der Inhalt der ersten Zeile der Tabelle angezeigt, egal ob der Zähler z.B. auf 3 gesetzt ist, i somit 3 sein und die Zeile der Tabelle auch 3 sein sollte. Klick ich dann den Weiter Button wird widerrum, wo sich der Zähler eben befindet, angemessen reagiert.

Wie gestalte ich am Besten das mit den zurück blättern?
Taugt mein Code einfach nichts, geht da vielleicht manches besser?


Nachfolgend um sich bildlich etwas vorzustellen ein Bild von derOberfläche und aktuellem Tabelleninhalt.




Wie üblich, jede Hilfe und Hinweise sind Willkommen.
 
Zuletzt bearbeitet:

Michael...

Top Contributor
Hatte jetzt nicht die Muse mir den ganzen Code anzusehen ;-) Aber was mir aufgefallen ist, sind die beiden for Schleifen bei Weiter und Zurück. Du musst doch nur die nächst bzw. vorhergehende Zeile anzeigen? Was sollen dann diese Schleifen beim "Weiter" Button fängst Du bei 0 an und lasst alle Inhalte bis zum aktuellen Zählerwert anzeigen. Letztlich siehst Du dann zwar die gewünschte Zeile, aber die Zeilen davor interessieren doch niemanden bzw. kann wohl niemand so schnell lesen, wie sie wieder verschwinden ;-) Beim "Zurück" Button fängst Du beim aktuellen Zählerwert an und hörst bei 0 auf, daher wird immer die erste Zeile angezeigt. --> Also die Schleife raus. Einfach nur Zähler erhöhen bzw. reduzieren und die Zeile zum aktuellen Zähler anzeigen.
[JAVA=348] for(int i = z.getZaehler() ; i >= minrow && i <= maxrow; i-- ) {
obj = tblAusgabe.getValueAt(i, 0);
ftfBearbVerwNr.setText(obj + "");
obj = tblAusgabe.getValueAt(i, 1);
ftfBearbMitarbNr1.setText(obj + "");
obj = tblAusgabe.getValueAt(i, 2);
ftfBearbMitarbNr2.setText(obj + "");
obj = tblAusgabe.getValueAt(i, 3);
ftfBearbMitarbNr3.setText(obj + "");
obj = tblAusgabe.getValueAt(i, 4);
araBearbBemerkungen.setText(obj + "");

//System.out.println("Zaehler:" + i + "\n ----------");
}[/code]
 

Aruhn

Mitglied
Danke, das ist es, einfach nur den Zähler erhöhen/reduzieren und die Zählvariable bei der row-Variable in getValueAt setzen. So einfach kanns gehen und ich hatte einfach wieder mal zu kompliziert gedacht. Hab Dank. :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
KeTho1712 Java Swing: JTable standardmäßig füllen, sodass bei Start bereits Datensätze gespeichert sind Allgemeine Java-Themen 1
H Swing JTextArea als TableCellRenderer in JTable - wie Zeilen selektieren? Allgemeine Java-Themen 47
D JTable mit JTextAreas in den Zellen Allgemeine Java-Themen 8
X Swing JTable zeigt nichts Allgemeine Java-Themen 4
G jTable aktualisieren?! Allgemeine Java-Themen 1
S JTable - mehrere ausgewählte Rows in ArrayList Allgemeine Java-Themen 5
A Fehler beim Aktualisieren JTable Allgemeine Java-Themen 1
D falsche Zeile aus JTable in MySQL gelöscht Allgemeine Java-Themen 6
offi Drag and Drop mehrerer File aus Explorer in JTable Allgemeine Java-Themen 1
V JTable Externe Lib Allgemeine Java-Themen 2
F JTable Pfeiltasten-Verhalten Allgemeine Java-Themen 1
T jTable Gestaffelte Überschriften Allgemeine Java-Themen 22
Paul15 2D Arraylist in Jtable Allgemeine Java-Themen 1
R jTable, nur Werte zwischen 2 Double values ausgeben Allgemeine Java-Themen 3
B Klassen JTable mit einer Liste Allgemeine Java-Themen 0
A JTable Bilder Allgemeine Java-Themen 1
F JTable mit Zellen die sich durch andere Eingaben füllen Allgemeine Java-Themen 1
A JTable - CellRange auslesen Allgemeine Java-Themen 2
A jTable Renderer Allgemeine Java-Themen 5
N JTable filtern Allgemeine Java-Themen 3
hdi JTable#print & Druckgröße Allgemeine Java-Themen 6
S JTable: Model durch ein anderes ersetzen Allgemeine Java-Themen 2
G JTable: ListSelectionListener removen Allgemeine Java-Themen 8
M JTable + ArrayList Allgemeine Java-Themen 3
G Aktualisierung einer JTable erfolgt nicht zuverlässig Allgemeine Java-Themen 14
E Hintergrund einer JTable änden Allgemeine Java-Themen 2
G Darstellung von Ergebnissen einer Dokumentensuche über eine JTable Allgemeine Java-Themen 19
Iron Monkey Inhalt von JTable in die Textdatei mit StringWidth schreiben Allgemeine Java-Themen 3
P jTable getSelectedRow? Allgemeine Java-Themen 2
B JTable eigene Daten Add Methode Allgemeine Java-Themen 2
B LEERE JTable MouseListener + popupmenu Allgemeine Java-Themen 2
X xml aus Zip in JTable Allgemeine Java-Themen 2
L jTable drag & drop einzelner Zeilen Allgemeine Java-Themen 4
S JTable und Spalten löschen Frage Allgemeine Java-Themen 5
H JTable per iText in PDF: Größenanpassung möglich? Allgemeine Java-Themen 2
F XML zu JTable mit JDOM Allgemeine Java-Themen 2
E JTable wird nicht angezeigt Allgemeine Java-Themen 11
Screen ImageIcon in Cell der JTable Allgemeine Java-Themen 2
G JTable mit Keylistener geht nicht Allgemeine Java-Themen 3
C Swing JTable Vector aus DB adden Allgemeine Java-Themen 3
A Swing JTable Polymorphismus Allgemeine Java-Themen 2
trash super + JTable Allgemeine Java-Themen 7
D JTable -> 1Spalte nur zahlen Allgemeine Java-Themen 2
L JTABLE setvalueat methode! Allgemeine Java-Themen 16
C Swing Daten zwischen JTable teilen Allgemeine Java-Themen 6
hdi JTable: Sortierung von Date-Objekten Allgemeine Java-Themen 4
B JTable nach Icon sortieren Allgemeine Java-Themen 6
N Exception beim auslesen einer JTable Allgemeine Java-Themen 5
M jdesktop binding: jTable update nach Änderung... Allgemeine Java-Themen 3
D JTable mit GROUP BY Allgemeine Java-Themen 23
martin82 Regex - JTable - Filter Allgemeine Java-Themen 10
X JTable mit Checkboxen -> Setzen (true/false) der Checkboxen per Mouseklick... Allgemeine Java-Themen 3
P JTable drucken Allgemeine Java-Themen 8
DStrohma [Erledigt] Wieso kann ich Taste 'ENTER' in JTable nicht belegen? Allgemeine Java-Themen 2
M jTable Allgemeine Java-Themen 19
D jTable und TableModel Allgemeine Java-Themen 2
B Exception bei leerem JTable verhindern Allgemeine Java-Themen 10
A Observable BeansBinding an einer JTable bzw. JXTable Allgemeine Java-Themen 3
P Textfile -> Array -> JTable Allgemeine Java-Themen 9
S JTable Aktuelisieren ber Wie ? Allgemeine Java-Themen 4
MQue JComboBox in JTable Allgemeine Java-Themen 4
J Ergebnismenge eines SQL-Queries in JTable anzeigen Allgemeine Java-Themen 3
MQue JTable alles rechts Allgemeine Java-Themen 8
G Checkboxen abfragen,Auswahl sichern, JTable laden Allgemeine Java-Themen 2
G Hibernate, JTable und Performance Allgemeine Java-Themen 17
R JTable und Cell Renderer Allgemeine Java-Themen 3
M JTable: Anzahl Zeichen bei Eingabe Allgemeine Java-Themen 2
S Welche Speicherung von Daten bei Kalendarfunktion der jtable Allgemeine Java-Themen 7
J keylistener auf jtable Allgemeine Java-Themen 19
C JTable, Abstand zwischen Zellen Allgemeine Java-Themen 2
G Eindeutiges Identifizieren einer JTable/Component z.laufzeit Allgemeine Java-Themen 2
D JTable -> ArrayIndexOutOfBoundsException bei Mausklick Allgemeine Java-Themen 2
S JTable editieren + in JTextField schreiben Allgemeine Java-Themen 7
G Daten in / für JTable beim Scrollen nachladen? Allgemeine Java-Themen 5
M JTable verändert Position auf meinem JPanel Allgemeine Java-Themen 3
P JTable Allgemeine Java-Themen 2
H JTable Löschen [Alle Zeilen aufeinmal Löschen] Allgemeine Java-Themen 6
P JTable setDataVector Allgemeine Java-Themen 2
D Scrollbalken in meiner JTable auf einmal weg. Allgemeine Java-Themen 2
P JTable Allgemeine Java-Themen 8
P JButtons mit JTable verknüpfen Allgemeine Java-Themen 16
G fehler bei JTable mit JDK1.6 Allgemeine Java-Themen 4
M CheckBox in JTable - ich verzweifle gleich Allgemeine Java-Themen 2
P JTable/Vector Allgemeine Java-Themen 5
P JTable Allgemeine Java-Themen 4
E JButton bleibt in der JTable Allgemeine Java-Themen 2
E JButton in einer Zelle von JTable Allgemeine Java-Themen 16
P JTable selektierte Zeile mitwandern Allgemeine Java-Themen 2
F Checkbox in JTable , eigener Cellrenderer -wie gehts weiter? Allgemeine Java-Themen 2
P JTable suchen in einer Spalte Allgemeine Java-Themen 24
G JTable wird nicht richtig aufgebaut Allgemeine Java-Themen 9
C Ausdrucken einer JTable in eine Datei mit Erhalt des Formats Allgemeine Java-Themen 3
W Columns austauschen/verschieben von jtable Allgemeine Java-Themen 3
P 3rd party JTable libraries (freeware/opensource) Allgemeine Java-Themen 19
D JTable aus Eclipse Ok, kompeliert aber nicht Allgemeine Java-Themen 6
G mySQL und JTable Allgemeine Java-Themen 7
D JTable und Buttons Allgemeine Java-Themen 16
B JScrollPane in einer JTable aktualisieren? Allgemeine Java-Themen 9
G CheckBox in JTable Allgemeine Java-Themen 3
S JTable erzeugen und updaten Allgemeine Java-Themen 10

Ähnliche Java Themen

Neue Themen


Oben