Hallo Java Gemeinde,
ich bin mal wieder auf einem Problem gestoßen dessen Lösung mir nicht ganz klar ist.
Und zwar wie folgt:
Arrays ist die Klasse wo ich die Vector Listen und ComboBoxen erzeuge. Mein Vorhaben ist, hier alles komplett abwickeln zu lassen, die Vector Elemente, ComboBoxen und das Aktualisieren dieser soll in dieser Klasse geschehen. Meine soweit gedachte Aktualisierungslösung funktioniert aber nicht und ich hab keinen richtigen Plan wie ich die ComboBox aktualisieren soll.
Grundlage für die Vectoren ist die Klasse DBUtils wo sich das Tabellenmodelle und die einzelnen erzeugten Tabellen befinden. (Code siehe nächstes [Java] Element).
DBUtils mit dem Tabellenmodell, und der Mitarbeiter Tabelle.
Nachfolgend nun die Mitarbeiter Klasse, hier wird die Tabelle angezeigt.
Testweise kann ein Datensatz hinzugefügt werden und nach Eingabe der Zeilennummer wieder gelöscht werden. Die Tabelle wird ordungsgemäß aktualisiert.
Hier befinden sich ua. dann die ComboBoxen.
Die Mitarbeiter Klasse werden in einer "Hauptklasse" mit einer JTabbedPane zusammengefügt.
Es gibt desweiteren einen Anmeldedialog der zuerst gestartet wird (in der Main Methode), der die DBConnection Klasse bekommt und dieser reicht "con" und angemeldete benutzer weiter.
Beim Löschen und Hinzufügen eines neuen Datensatzes in der Mitarbeitertabelle soll entsprechend die ComboBox aktualisiert werden. Wie stelle ich das nun am Besten an?
Für jede Hilfe bin ich zutiefst dankbar.
Danke schon mal für eure Mühen sich damit auseinanderzusetzen.
ich bin mal wieder auf einem Problem gestoßen dessen Lösung mir nicht ganz klar ist.
Und zwar wie folgt:
Arrays ist die Klasse wo ich die Vector Listen und ComboBoxen erzeuge. Mein Vorhaben ist, hier alles komplett abwickeln zu lassen, die Vector Elemente, ComboBoxen und das Aktualisieren dieser soll in dieser Klasse geschehen. Meine soweit gedachte Aktualisierungslösung funktioniert aber nicht und ich hab keinen richtigen Plan wie ich die ComboBox aktualisieren soll.
Grundlage für die Vectoren ist die Klasse DBUtils wo sich das Tabellenmodelle und die einzelnen erzeugten Tabellen befinden. (Code siehe nächstes [Java] Element).
Java:
public class Arrays
{
private DBUtils dbu;
private int max;
private int aktuell;
private Vector vecTblInhalt;
private Object obj;
private JComboBox cbxNummern ;
private JComboBox cbxMitarb;
public Arrays(DBUtils dbu)
{
this.dbu = dbu;
}
public Vector getMitarbeiterNrs()
{
try {
max = dbu.mitarbeiterTabelle().getRowCount();
vecTblInhalt = new Vector();
for(int i = 0; i < max; i++) {
obj = dbu.mitarbeiterTabelle().getValueAt(i, 0);
vecTblInhalt.addElement(obj);
}
return vecTblInhalt;
} catch (NullPointerException ex) {
vecTblInhalt = new Vector();
return vecTblInhalt;
}
}
public JComboBox cbxMitarbNrs()
{
cbxNummern = new JComboBox();
for(int i = 0; i < getMitarbeiterNrs().size(); i++) {
cbxNummern.addItem(getMitarbeiterNrs().elementAt(i));
}
return cbxNummern;
}
public void updateCbxMitarbNrs()
{
max = dbu.mitarbeiterTabelle().getRowCount();
vecTblInhalt = getMitarbeiterNrs();
int vecsize = vecTblInhalt.size();
aktuell = cbxMitarbNrs().getItemCount();
System.out.println("ComboBox akt: " + aktuell);
System.out.println("ComboBox max: " + max);
System.out.println("Max Mitarb: + " + vecsize);
for(int i = 0; i < getMitarbeiterNrs().size(); i++) {
cbxNummern.addItem(getMitarbeiterNrs().elementAt(i));
}
}
public void updateRemoveCbxMitarbNrs()
{
max = dbu.mitarbeiterTabelle().getRowCount();
vecTblInhalt = getMitarbeiterNrs();
aktuell = cbxMitarbNrs().getItemCount();
for(int i = aktuell; i > getMitarbeiterNrs().size(); i--) {
cbxNummern.removeItem(getMitarbeiterNrs().elementAt(i));
}
}
}
DBUtils mit dem Tabellenmodell, und der Mitarbeiter Tabelle.
Java:
public class DBUtils
{
private JTable tblAusgabe;
private Connection con;
private String benutzer;
public DBUtils(Connection con, String benutzer)
{
this.con = con;
this.benutzer = benutzer;
}
public static TableModel resultSetToTableModel(ResultSet rs)
{
try
{
ResultSetMetaData metaData = rs.getMetaData();
int numberOfColumns = metaData.getColumnCount();
Vector columnNames = new Vector();
// Get the column names
for (int column = 0; column < numberOfColumns; column++) {
columnNames.addElement(metaData.getColumnLabel(column + 1));
}
// Get all rows.
Vector rows = new Vector();
while (rs.next()) {
Vector newRow = new Vector();
for (int i = 1; i <= numberOfColumns; i++) {
newRow.addElement(rs.getObject(i));
}
rows.addElement(newRow);
}
return new DefaultTableModel(rows, columnNames);
}
catch (Exception e)
{
System.out.println("[TableModel]" + e) ;
return null;
}
}
//Mitarbeiter Tabelle
public JTable mitarbeiterTabelle()
{
try {
String verw_sql = "SELECT * FROM Mitarbeiter";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(verw_sql);
ResultSetMetaData rsmd = rs.getMetaData();
tblAusgabe = new JTable(resultSetToTableModel(rs));
//JScrollPane ausgabe = new JScrollPane(tblAusgabe);
//ausgabe.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
return tblAusgabe;
} catch (Exception ex) {
System.out.println("[JTable Mitarbeiter Tabelle] " + ex);
return null;
}
}
public String AbfrageMitarbeiterTyp()
{
String typ;
String sql = "SELECT typname FROM Benutzer WHERE";
sql += " benutzer_name = '" + benutzer + "'";
try {
Statement stmt = con.createStatement();
ResultSet res = stmt.executeQuery(sql);
res.next();
typ = res.getString(1);
return typ;
} catch (Exception ex) {
System.out.println("[Abfrage Mitarbeitertyp] " + ex);
return typ = "";
}
}
}
Nachfolgend nun die Mitarbeiter Klasse, hier wird die Tabelle angezeigt.
Testweise kann ein Datensatz hinzugefügt werden und nach Eingabe der Zeilennummer wieder gelöscht werden. Die Tabelle wird ordungsgemäß aktualisiert.
Java:
public class Mitarbeiter
extends JPanel implements ActionListener
{
JTable tblAusgabe;
JScrollPane scrolltabelle;
Connection con;
String user;
DBUtils dbu;
Arrays arra;
TestComboBoxen comb;
JButton btnErstellen = new JButton("Erstellen");
JButton btnLoeschen = new JButton("Loeschen");
JTextField txtNummer = new JTextField(8);
String sql = "SELECT * FROM Mitarbeiter";
public Mitarbeiter(Connection con, DBUtils dbu, Arrays arra, TestComboBoxen comb)
{
this.con = con;
this.user = user;
this.dbu = dbu;
this.arra = arra;
this.comb = comb;
String abfrage = "SELECT c.* FROM Benutzer a, Mitarbeiter b, Vorortverwalter c WHERE a.mitarb_nr = b.mitarb_nr AND b.mitarb_nr = c.erster_mitarb AND a.typname = 'Benutzer'";
tblAusgabe = dbu.mitarbeiterTabelle();
scrolltabelle = new JScrollPane(tblAusgabe);
btnErstellen.addActionListener(this);
btnLoeschen.addActionListener(this);
add(scrolltabelle);
add(btnErstellen);
add(txtNummer);
add(btnLoeschen);
}
public void updateTabelle()
{
try {
tblAusgabe = dbu.mitarbeiterTabelle();
scrolltabelle.setViewportView(tblAusgabe);
scrolltabelle.revalidate();
scrolltabelle.repaint();
System.out.println("Update erfolgt");
} catch (Exception ex) {
System.out.println(ex);
}
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == btnErstellen) {
try {
String lsql = "INSERT INTO Mitarbeiter (nachname, vorname) VALUES ('ComboTest', 'TestCombo')";
Statement stmt = con.createStatement();
stmt.execute(lsql);
updateTabelle();
//comb.updateComboBox();
//arra.updateCbxMitarbNrs();
//arra.setcbxMitarb();
} catch (Exception ex) {
System.out.println(ex);
}
} else {
try {
String lsql = "DELETE FROM Mitarbeiter WHERE mitarb_nr = " + txtNummer.getText();
Statement stmt = con.createStatement();
stmt.execute(lsql);
updateTabelle();
//comb.updateComboBox();
arra.updateRemoveCbxMitarbNrs();
} catch (Exception ex) {
System.out.println(ex);
}
}
}
}
Hier befinden sich ua. dann die ComboBoxen.
Java:
public class TestComboBoxen
extends JPanel
{
private JLabel lblInfo;
private JTextField txtAbfrage = new JTextField();
private Arrays arra;
private Connection con;
private JComboBox cbxBearbMitarbNr; // = new JComboBox();
private JComboBox cbxBearbVerwNr = new JComboBox();
private JComboBox cbxBearbMieterNr;
public TestComboBoxen(Arrays arra, Connection con, DBUtils dbu)
{
this.arra = arra;
this.con = con;
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(4,2));
cbxBearbMitarbNr = arra.cbxMitarbNrs();
String sql = "SELECT a.verw_nr FROM Vorortverwalter a, Mitarbeiter b";
sql += ", Benutzer c WHERE c.mitarb_nr = b.mitarb_nr AND";
sql += " (b.mitarb_nr = a.erster_mitarb OR";
sql += " b.mitarb_nr = a.zweiter_mitarb OR";
sql += " b.mitarb_nr = a.dritter_mitarb) AND";
sql += " c.benutzer_name = 'sindy' AND c.typname = 'Mitarbeiter'";
txtAbfrage.setText(dbu.AbfrageVerwalterNr());
cbxBearbVerwNr = arra.cbxVerwNrs();
cbxBearbMieterNr = arra.cbxMieterNrs();
lblInfo = new JLabel("Mitarbeiter Nummern");
panel.add(lblInfo);
panel.add(cbxBearbMitarbNr);
lblInfo = new JLabel("Verwalter Nummer");
panel.add(lblInfo);
panel.add(cbxBearbVerwNr);
lblInfo = new JLabel("Mieter Nummers");
panel.add(lblInfo);
panel.add(cbxBearbMieterNr);
panel.add(txtAbfrage);
add(panel);
}
}
Es gibt desweiteren einen Anmeldedialog der zuerst gestartet wird (in der Main Methode), der die DBConnection Klasse bekommt und dieser reicht "con" und angemeldete benutzer weiter.
Beim Löschen und Hinzufügen eines neuen Datensatzes in der Mitarbeitertabelle soll entsprechend die ComboBox aktualisiert werden. Wie stelle ich das nun am Besten an?
Für jede Hilfe bin ich zutiefst dankbar.
Danke schon mal für eure Mühen sich damit auseinanderzusetzen.