Hallo,
verstehe nicht, was ich falsch mache. Es ist ein JDialog, wo Datenbankinhalt gezeigt wird. In diesem JDialog gibt es ein JButton "Neu" zum anlegen eines neuen Datensatzes. "Neu" öffnet noch ein JDialog, wo man einzelne Werte eintragen kann. Wenn man dann auf "OK" klickt, werden die Daten in die DB geschrieben, das erste JDialog sollte benachrichtigt werden und Tabelle neu einlesen.
Code des ersten JDialogs:
Fenster für die Eingabe(DSNeu):
was habe ich übersehen?
verstehe nicht, was ich falsch mache. Es ist ein JDialog, wo Datenbankinhalt gezeigt wird. In diesem JDialog gibt es ein JButton "Neu" zum anlegen eines neuen Datensatzes. "Neu" öffnet noch ein JDialog, wo man einzelne Werte eintragen kann. Wenn man dann auf "OK" klickt, werden die Daten in die DB geschrieben, das erste JDialog sollte benachrichtigt werden und Tabelle neu einlesen.
Code des ersten JDialogs:
Code:
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Observable;
import java.util.Observer;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class DBFenster extends JDialog implements ActionListener,Observer{
private static final long serialVersionUID = 6820490495593525796L;
private Init ini=new Init();
private MySQLHaendler mysql=new MySQLHaendler();
private int dbnummer;
private String tabname;
private DefaultTableModel tabmodel;
private JTable tabelle;
private JButton btneu=new JButton("Neu");
private JButton btbearb=new JButton("Bearbeiten");
private JButton btdel=new JButton("Löschen");
private JButton btdelall=new JButton("Alle löschen");
private JButton btabbrechen=new JButton("Schliessen");
private JComboBox sortbox;
private String sql;
private String[] tueber;
private DSNeu satzneu;
public DBFenster(int dbnr){
dbnummer=dbnr;
String[][] tabnamen=ini.getTABNamen();
tabname=tabnamen[dbnummer][0];
tueber=ini.getTabhead(dbnummer);
this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
this.setModalityType(ModalityType.APPLICATION_MODAL);
this.setLayout(new BorderLayout());
this.add(this.getOben(),BorderLayout.NORTH);
this.tabFuellen();
this.add(this.getMitte(),BorderLayout.CENTER);
this.add(this.getUnten(),BorderLayout.SOUTH);
this.tabFuellen();
this.pack();
this.setVisible(true);
}
private void tabFuellen(){
tabmodel=new DefaultTableModel(tueber,0);
sql="SELECT id,";
for(int i=0;i<tueber.length;i++){
sql+=tueber[i].toLowerCase()+",";
}
sql=sql.substring(0, sql.length()-1);
sql+=" FROM "+tabname+" ORDER BY "+tueber[0].toLowerCase();
Vector<String[]> resultat=mysql.getDaten(sql,tueber);
for(int i=0;i<resultat.size();i++){
tabmodel.addRow(resultat.get(i));
}
}
private JPanel getOben(){
JPanel rgwert=new JPanel(new BorderLayout());
String[][] tabnamen=ini.getTABNamen();
String toben=" Datenbank "+tabnamen[dbnummer][1];
rgwert.add(new JLabel(toben),BorderLayout.WEST);
JPanel sortp=new JPanel(new FlowLayout(FlowLayout.RIGHT));
sortp.add(new JLabel("Sortieren nach: "));
sortbox=new JComboBox(ini.getTabhead(dbnummer));
sortp.add(sortbox);
rgwert.add(sortp,BorderLayout.EAST);
return rgwert;
}
private JPanel getMitte(){
JPanel rgwert=new JPanel(new BorderLayout());
JScrollPane scroll=new JScrollPane();
tabelle=new JTable(tabmodel);
scroll.getViewport().add(tabelle);
rgwert.add(scroll,BorderLayout.CENTER);
return rgwert;
}
private JPanel getUnten(){
JPanel rgwert=new JPanel(new FlowLayout(FlowLayout.RIGHT));
btneu.setActionCommand("neu");
btneu.addActionListener(this);
rgwert.add(btneu);
rgwert.add(btbearb);
rgwert.add(btdel);
rgwert.add(btdelall);
btabbrechen.setActionCommand("abbrechen");
btabbrechen.addActionListener(this);
rgwert.add(btabbrechen);
return rgwert;
}
@Override
public void actionPerformed(ActionEvent ae) {
if(ae.getActionCommand().equals("neu")){
satzneu=new DSNeu(dbnummer); // Fenster für Eingabe
satzneu.addObserver(this);
}
else if(ae.getActionCommand().equals("abbrechen")){
this.dispose();
}
}
@Override
public void update(Observable obs, Object obj) {
System.out.println("update"); // erscheint nicht
if(obj.equals("neu")){
System.out.println("if neu"); // erscheint natürlich auch nicht
satzneu.deleteObserver(this);
this.tabFuellen();
}
}
}
Fenster für die Eingabe(DSNeu):
Code:
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.Dialog.ModalityType;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Observable;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class DSNeu extends Observable implements ActionListener{
private JDialog dialog=new JDialog();
private int dbnummer;
private Init ini=new Init();
private JButton ok=new JButton("OK");
private JButton abbrechen=new JButton("Abbrechen");
private String[] kopf;
private Vector<JTextField> eingabe=new Vector<JTextField>();
private String[][] tabnamen;
private MySQLHaendler mysql=new MySQLHaendler();
public DSNeu(int nr){
dbnummer=nr;
kopf=ini.getTabhead(dbnummer);
tabnamen=ini.getTABNamen();
String toben=" Neu für Datenbank "+tabnamen[dbnummer][1];
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setModalityType(ModalityType.APPLICATION_MODAL);
dialog.setLayout(new BorderLayout());
dialog.add(new JLabel(toben),BorderLayout.NORTH);
dialog.add(this.getFelder(),BorderLayout.CENTER);
dialog.add(this.getButtons(),BorderLayout.SOUTH);
dialog.pack();
int hoehe=dialog.getHeight();
int breite=Toolkit.getDefaultToolkit().getScreenSize().width;
dialog.setSize(breite,hoehe);
dialog.setVisible(true);
}
private JPanel getFelder(){
JPanel rgwert=new JPanel(new GridLayout(0,kopf.length));
for(int i=0;i<kopf.length;i++){
rgwert.add(new JLabel(kopf[i]));
eingabe.add(new JTextField());
}
for(int i=0;i<eingabe.size();i++){
rgwert.add(eingabe.get(i));
}
return rgwert;
}
private JPanel getButtons(){
JPanel rgwert =new JPanel(new FlowLayout(FlowLayout.RIGHT));
ok.setActionCommand("ok");
ok.addActionListener(this);
rgwert.add(ok);
abbrechen.setActionCommand("abbrechen");
abbrechen.addActionListener(this);
rgwert.add(abbrechen);
return rgwert;
}
@Override
public void actionPerformed(ActionEvent ae) {
if(ae.getActionCommand().equals("ok")){
String anfrage="INSERT INTO ";
anfrage+=tabnamen[dbnummer][0]+"(";
for(int i=0;i<kopf.length;i++){
anfrage+=kopf[i]+",";
}
anfrage=anfrage.substring(0, anfrage.length()-1);
anfrage+=") VALUES (";
for(int i=0;i<eingabe.size();i++){
anfrage+="'"+eingabe.get(i).getText()+"'"+",";
}
anfrage=anfrage.substring(0, anfrage.length()-1);
anfrage+=")";
mysql.insertNeu(anfrage);
System.out.println("setChanged");
this.setChanged();
System.out.println("notifyObservers");
this.notifyObservers("neu");
System.out.println("dispose");
dialog.dispose();
System.out.println("ok ende");
}
else if(ae.getActionCommand().equals("abbrechen")){
dialog.dispose();
}
}
}
was habe ich übersehen?