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
DBConnect
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:
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
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