Guten Tag,
ich schreibe gerade ein Programm, mit dem ich auf eine MySQL Datenbank zugreife.
In einem Teil des Programms, sollen Daten aus der MySQL Datenbank in eine JTable geschrieben werden.
Das klappt inzwischen auch einigermaßen gut.
Nur habe ich noch ein paar Probleme, ich poste erstmal meinen Quellcode:
Mein erstes Problem ist, dass das Programm zuviele Ressourcen frisst, wenn ich scrolle, braucht das Programm immer stunden, bis es reagiert.
Wie kann ich den Quelltext ändern, so dass das Programm nicht so viele Ressourcen braucht, also es flüssig läuft?
Ein weiteres Problem ist, das noch zwei Spalten in der JTable fehlen, diese Spalten sollen allerdings nicht mit Daten aus der MySQL Datenbank gefüllt werden.
Die beiden Spalten sollen als checkbox dargestellt werden.
Funktion der Spalten:
"Wenn man von einen oder mehreren Aufträgen einen Lieferschein ausdrucken möchte, kann man die dementsprechenden Zeilen selektieren und mit der Betätigung eines Buttons soll von den selektierten Zeilen ein Dokument(Lieferschein) erstellt werden."
Ich habe die Spalten schon einmal eingefügt.
Wenn ich das Programm ausführe und dann ein Hacken in der ersten Spalte setze bekomme ich aber folgende Fehlermeldung:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Model.setValueAt(NewJFrame.java:489)
at javax.swing.JTable.setValueAt(Unknown Source)
at javax.swing.JTable.editingStopped(Unknown Source)
at javax.swing.AbstractCellEditor.fireEditingStopped(Unknown Source)
at javax.swing.DefaultCellEditor$EditorDelegate.stopCellEditing(Unknown Source)
at javax.swing.DefaultCellEditor.stopCellEditing(Unknown Source)
at javax.swing.DefaultCellEditor$EditorDelegate.actionPerformed(Unknown Source)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.JToggleButton$ToggleButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI$Handler.repostEvent(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI$Handler.mouseReleased(Unknown Source)
at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Also habe ich den Teil erstmal wieder aus dem Programm rausgenommen.
Wie kann ich zwei Spalten ausgeben, die nicht mit den Daten aus der MySQL Datenbank gefüllt sind, so das ich diese dann auch verwenden kann, ohne das ich diese Fehlermeldung erhalte?
Schon einmal vielen Dank im voraus.
MfG
bertram
ich schreibe gerade ein Programm, mit dem ich auf eine MySQL Datenbank zugreife.
In einem Teil des Programms, sollen Daten aus der MySQL Datenbank in eine JTable geschrieben werden.
Das klappt inzwischen auch einigermaßen gut.
Nur habe ich noch ein paar Probleme, ich poste erstmal meinen Quellcode:
Code:
public class NewJFrame extends javax.swing.JFrame
{
public NewJFrame()
{
initComponents();
}
public static void main(String[] args)
{
Model model = new Model();
JTable table = new JTable( model );
javax.swing.table.TableColumn col = table.getColumnModel().getColumn(0);
col.setMinWidth(50);
col.setPreferredWidth(50);
javax.swing.table.TableColumn col2 = table.getColumnModel().getColumn(1);
col2.setMinWidth(50);
col2.setPreferredWidth(50);
javax.swing.table.TableColumn col3 = table.getColumnModel().getColumn(2);
col3.setMinWidth(50);
col3.setPreferredWidth(50);
javax.swing.table.TableColumn col4 = table.getColumnModel().getColumn(3);
col4.setMinWidth(50);
col4.setPreferredWidth(50);
javax.swing.table.TableColumn col5 = table.getColumnModel().getColumn(4);
col5.setMinWidth(50);
col5.setPreferredWidth(50);
javax.swing.table.TableColumn col6 = table.getColumnModel().getColumn(5);
col6.setMinWidth(50);
col6.setPreferredWidth(50);
javax.swing.table.TableColumn col7 = table.getColumnModel().getColumn(6);
col7.setMinWidth(50);
col7.setPreferredWidth(50);
javax.swing.table.TableColumn col8 = table.getColumnModel().getColumn(7);
col8.setMinWidth(50);
col8.setPreferredWidth(100);
javax.swing.table.TableColumn col9 = table.getColumnModel().getColumn(8);
col9.setMinWidth(150);
col9.setPreferredWidth(50);
javax.swing.table.TableColumn col10 = table.getColumnModel().getColumn(9);
col10.setMinWidth(100);
col10.setPreferredWidth(50);
javax.swing.table.TableColumn col11 = table.getColumnModel().getColumn(10);
col11.setMinWidth(50);
col11.setPreferredWidth(50);
javax.swing.table.TableColumn col12 = table.getColumnModel().getColumn(11);
col12.setMinWidth(50);
col12.setPreferredWidth(50);
javax.swing.table.TableColumn col13 = table.getColumnModel().getColumn(12);
col13.setMinWidth(50);
col13.setPreferredWidth(100);
javax.swing.table.TableColumn col14 = table.getColumnModel().getColumn(13);
col14.setMinWidth(75);
col14.setPreferredWidth(75);
javax.swing.table.TableColumn col15 = table.getColumnModel().getColumn(14);
col15.setMinWidth(50);
col15.setPreferredWidth(50);
javax.swing.table.TableColumn col16 = table.getColumnModel().getColumn(15);
col16.setMinWidth(50);
col16.setPreferredWidth(50);
javax.swing.table.TableColumn col17 = table.getColumnModel().getColumn(16);
col17.setMinWidth(50);
col17.setPreferredWidth(50);
javax.swing.table.TableColumn col18 = table.getColumnModel().getColumn(17);
col18.setMinWidth(50);
col18.setPreferredWidth(50);
javax.swing.table.TableColumn col19 = table.getColumnModel().getColumn(18);
col19.setMinWidth(50);
col19.setPreferredWidth(50);
javax.swing.table.TableColumn col20 = table.getColumnModel().getColumn(19);
col20.setMinWidth(75);
col20.setPreferredWidth(75);
javax.swing.table.TableColumn col21 = table.getColumnModel().getColumn(20);
col21.setMinWidth(50);
col21.setPreferredWidth(50);
javax.swing.table.TableColumn col22 = table.getColumnModel().getColumn(21);
col22.setMinWidth(75);
col22.setPreferredWidth(75);
javax.swing.table.TableColumn col23 = table.getColumnModel().getColumn(22);
col23.setMinWidth(75);
col23.setPreferredWidth(75);
javax.swing.table.TableColumn col24 = table.getColumnModel().getColumn(23);
col24.setMinWidth(75);
col24.setPreferredWidth(75);
javax.swing.table.TableColumn col25 = table.getColumnModel().getColumn(24);
col25.setMinWidth(75);
col25.setPreferredWidth(75);
table.setBackground(Color.green);
table.setAutoscrolls(true);
table.setEnabled(true);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
JFrame frame = new JFrame("Auftragsübersicht");
frame.getContentPane().add(new JScrollPane(table));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
frame.setSize(800,600);
}
}
class Model extends AbstractTableModel
{
private String[] Prioritaet = new String[99999];
private boolean[] KontrollKz = new boolean[99999];
private boolean[] LSKz = new boolean[99999];
private boolean[] REKz = new boolean[99999];
private boolean[] StornoKz = new boolean[99999];
private String[] ZeichnungsNr = new String[99999];
private String[] Bez = new String[99999];
private String[] BestellNr = new String[99999];
private int[] Position = new int[99999];
private String[] betrag = new String[99999];
private String[] abnr = new String[99999];
private String[] ablief = new String[99999];
private int[] bestellt = new int[99999];
private String[] Bestelldatum = new String[99999];
private String[] Bedarfsdatum = new String[99999];
private String[] bemerkung = new String[99999];
private String[] auftrag = new String[99999];
private String[] idnr = new String[99999];
private String[] lsnr = new String[99999];
private String[] lsdatum = new String[99999];
private String[] renr = new String[99999];
private String[] redatum = new String[99999];
private String[] stdatum = new String[99999];
public Model()
{
String hostname = "***.***.***.***";
String port = "****";
String dbname = "****";
String user = "****";
String pw = "****";
Connection conn = null;
for(int i=-1;i<7878;i=i)
{
try
{
Class.forName("com.mysql.jdbc.Driver").newInstance();
}
catch(Exception e)
{
System.out.println("Fehler 1");
System.out.println(e);
}
try
{
String url = "jdbc:mysql://"+hostname+":"+port+"/"+dbname;
conn = DriverManager.getConnection(url,user,pw);
String sql = "SELECT * FROM alle_auftraege;";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while(rs.next())
{
i++;
String Prior = rs.getString("Prioritaet");
Prioritaet[i] = Prior;
Boolean KKZ = rs.getBoolean("KontrollKZ");
KontrollKz[i] = KKZ;
Boolean LKZ = rs.getBoolean("LSKz");
LSKz[i] = LKZ;
Boolean RKZ = rs.getBoolean("REKz");
REKz[i] = RKZ;
Boolean SKZ = rs.getBoolean("StornoKz");
StornoKz[i] = SKZ;
String ZeichNr = rs.getString("ZeichNr");
ZeichnungsNr[i] = ZeichNr;
String Bezeichnung = rs.getString("Bezeichnung");
Bez[i] = Bezeichnung;
String BestNr = rs.getString("BestNr");
BestellNr[i] = BestNr;
Integer Pos = rs.getInt("Position");
Position[i] = Pos;
String Betrag = rs.getString("Betrag");
betrag[i] = Betrag;
String ABNr = rs.getString("ABNr");
abnr[i] = ABNr;
String ABLief = rs.getString("ABLief");
ablief[i] = ABLief;
Integer bst = rs.getInt("bestellt");
bestellt[i] = bst;
String Bestdat = rs.getString("Bestelldatum");
Bestelldatum[i] = Bestdat;
String Beddat = rs.getString("Bedarfsdatum");
Bedarfsdatum[i] = Beddat;
String Bemerkung = rs.getString("Bemerkung");
bemerkung[i] = Bemerkung;
String Auftrag = rs.getString("Auftrag");
auftrag[i] = Auftrag;
String IDNr = rs.getString("IDNr");
idnr[i] = IDNr;
String LSNr = rs.getString("LSNr");
lsnr[i] = LSNr;
String LSDatum = rs.getString("LSDatum");
lsdatum[i] = LSDatum;
String RENr = rs.getString("RENr");
renr[i] = RENr;
String REDatum = rs.getString("REDatum");
redatum[i] = REDatum;
String STDatum = rs.getString("StornoDatum");
stdatum[i] = STDatum;
}
}
catch(Exception e)
{
System.out.println(e.getMessage());
System.out.println("Fehler 2");
}
}
}
// Die Anzahl Columns
public int getColumnCount()
{
return 25;
}
// Die Anzahl Rows
public int getRowCount()
{
String hostname="***.***.***.***";
String port="****";
String dbname="****";
String user="****";
String pw="****";
Connection conn=null;
int rowcount=0;
try
{
Class.forName("com.mysql.jdbc.Driver");
}
catch(Exception e)
{
System.out.println("Fehler");
}
try
{
String url ="jdbc:mysql://"+hostname+":"+port+"/"+dbname;
conn=DriverManager.getConnection(url,user,pw);
Statement stmt = conn.createStatement();
String sql="SELECT * FROM alle_auftraege;";
ResultSet rs = stmt.executeQuery(sql);
while(rs.next())
{
rowcount++;
}
return rowcount;
}
catch(Exception e)
{
System.out.println("Fehler");
return 0;
}
}
public String getColumnName(int column)
{
switch( column )
{
case 0: return "Priorität";
case 1: return "KKZ";
case 2: return "LKZ";
case 3: return "RKZ";
case 4: return "SKZ";
case 5: return "ZeichNr";
case 6: return "Bezeichnung";
case 7: return "BestNr";
case 8: return "Position";
case 9: return "Betrag";
case 10: return "ABNr";
case 11: return "ABLief";
case 12: return "bestellt";
case 13: return "Bestelldatum";
case 14: return "Bedarfsdatum";
case 15: return "Bemerkung";
case 16: return "Auftrag";
case 17: return "IDNr";
case 18: return "LSNr";
case 19: return "LSDatum";
case 20: return "RENr";
case 21: return "REDatum";
case 22: return "STDatum";
default: return null;
}
}
public Object getValueAt(int rowIndex, int columnIndex)
{
switch( columnIndex )
{
case 0: return Prioritaet[ rowIndex ];
case 1: return new Boolean(KontrollKz[ rowIndex ]);
case 2: return new Boolean(LSKz[ rowIndex ]);
case 3: return new Boolean(REKz[ rowIndex ]);
case 4: return new Boolean(StornoKz[ rowIndex ]);
case 5: return ZeichnungsNr[ rowIndex ];
case 6: return Bez[ rowIndex ];
case 7: return BestellNr[ rowIndex ];
case 8: return new Integer( Position[ rowIndex ] );
case 9: return betrag[ rowIndex ];
case 10: return abnr[ rowIndex ];
case 11: return ablief[ rowIndex ];
case 12: return new Integer( bestellt[ rowIndex ]);
case 13: return Bestelldatum[ rowIndex ];
case 14: return Bedarfsdatum[ rowIndex ];
case 15: return bemerkung[ rowIndex ];
case 16: return auftrag[ rowIndex ];
case 17: return idnr[ rowIndex ];
case 18: return lsnr[ rowIndex ];
case 19: return lsdatum[ rowIndex ];
case 20: return renr[ rowIndex ];
case 21: return redatum[ rowIndex ];
case 22: return stdatum[ rowIndex ];
default: return null;
}
}
public Class getColumnClass(int columnIndex)
{
switch( columnIndex )
{
case 0: return String.class;
case 1: return Boolean.class;
case 2: return Boolean.class;
case 3: return Boolean.class;
case 4: return Boolean.class;
case 5: return String.class;
case 6: return String.class;
case 7: return String.class;
case 8: return Integer.class;
case 9: return String.class;
case 10: return String.class;
case 11: return String.class;
case 12: return Integer.class;
case 13: return String.class;
case 14: return String.class;
case 15: return String.class;
case 16: return String.class;
case 17: return String.class;
case 18: return String.class;
case 19: return String.class;
case 20: return String.class;
case 21: return String.class;
case 22: return String.class;
default: return null;
}
}
public boolean isCellEditable(int rowIndex, int columnIndex)
{
return true;
}
public void setValueAt(Object aValue, int rowIndex, int columnIndex)
{
switch( columnIndex )
{
case 3:
KontrollKz[ rowIndex ] = ((Boolean)aValue).booleanValue();
break;
case 11:
betrag[ rowIndex ] = aValue.toString();
break;
case 12:
abnr[ rowIndex ] = aValue.toString();
break;
case 13:
ablief[ rowIndex ] = aValue.toString();
break;
case 17:
bemerkung[ rowIndex ] = aValue.toString();
}
}
}
Mein erstes Problem ist, dass das Programm zuviele Ressourcen frisst, wenn ich scrolle, braucht das Programm immer stunden, bis es reagiert.
Wie kann ich den Quelltext ändern, so dass das Programm nicht so viele Ressourcen braucht, also es flüssig läuft?
Ein weiteres Problem ist, das noch zwei Spalten in der JTable fehlen, diese Spalten sollen allerdings nicht mit Daten aus der MySQL Datenbank gefüllt werden.
Die beiden Spalten sollen als checkbox dargestellt werden.
Funktion der Spalten:
"Wenn man von einen oder mehreren Aufträgen einen Lieferschein ausdrucken möchte, kann man die dementsprechenden Zeilen selektieren und mit der Betätigung eines Buttons soll von den selektierten Zeilen ein Dokument(Lieferschein) erstellt werden."
Ich habe die Spalten schon einmal eingefügt.
Wenn ich das Programm ausführe und dann ein Hacken in der ersten Spalte setze bekomme ich aber folgende Fehlermeldung:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Model.setValueAt(NewJFrame.java:489)
at javax.swing.JTable.setValueAt(Unknown Source)
at javax.swing.JTable.editingStopped(Unknown Source)
at javax.swing.AbstractCellEditor.fireEditingStopped(Unknown Source)
at javax.swing.DefaultCellEditor$EditorDelegate.stopCellEditing(Unknown Source)
at javax.swing.DefaultCellEditor.stopCellEditing(Unknown Source)
at javax.swing.DefaultCellEditor$EditorDelegate.actionPerformed(Unknown Source)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.JToggleButton$ToggleButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI$Handler.repostEvent(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI$Handler.mouseReleased(Unknown Source)
at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Also habe ich den Teil erstmal wieder aus dem Programm rausgenommen.
Wie kann ich zwei Spalten ausgeben, die nicht mit den Daten aus der MySQL Datenbank gefüllt sind, so das ich diese dann auch verwenden kann, ohne das ich diese Fehlermeldung erhalte?
Schon einmal vielen Dank im voraus.
MfG
bertram