Hallo,
ich habe ein Problem mit dem Ausgeben eines bestimmten Feldes aus einer JTable.
Zum Hintergrund:
Die JTable wird mithilfe einer MySQL DB gefüllt.
Die Erste Tabelle hat 6 Spalten und 31 befüllte Zeilen.
Die Zweite Tabelle hat 6 Spalten und 11 befüllte Zeilen.
main.java
gui.java
Beim starten wird alles korrekt geladen und ausgegeben.
Sobald ich aber die tabelle wechsle (als auf Tabelle 2, die nur 11 Einträge hat) bekomme ich eine Exception:
Diese wiederholt sich ein paar Mal mit einzelnen Werten aus der Tabelle2 zwischen den Exceptions.
Erwähnenswert: Wenn ich die For Schleife auf 11 begrenze, läuft es Problemlos durch, allerdings gibt er mir das Ergebnis 2x aus. Wieso?
Das Ziel ist es im Endeffekt die Werte als Linien-Diagramm darstellen zu lassen.
Aber soweit bin ich noch nicht.
Half auch nicht:
Liegts daran, dass überhaupt keine 12. Zeile erzeugt wird? Habe auch versucht int columns auf 31 zu setzen. Keine Besserung.
Ich bedanke mich herzlichst wenn jemand einen Tipp zur Lösung findet
*EDIT:
Die Spalte die ausgelesen wird, ist in MySQL als Float definiert.
ich habe ein Problem mit dem Ausgeben eines bestimmten Feldes aus einer JTable.
Zum Hintergrund:
Die JTable wird mithilfe einer MySQL DB gefüllt.
Die Erste Tabelle hat 6 Spalten und 31 befüllte Zeilen.
Die Zweite Tabelle hat 6 Spalten und 11 befüllte Zeilen.
main.java
Java:
Vector<String> columnNames = new Vector<String>();
Vector<Vector> data = new Vector<Vector>();
try {
//Connect to the Database
Class.forName(driver);
Connection connection = DriverManager.getConnection(databaseURL, DATABASE_USER, USER_PASSWORD);
//Read data from table
String sql = "Select * from "+tabelle+";";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(sql);
ResultSetMetaData md = rs.getMetaData();
int columns = md.getColumnCount();
//System.out.println(columns);
//Get column names
for (int i=1;i<=columns;i++) {
columnNames.addElement( md.getColumnName(i));
//System.out.print(md.getColumnName(i));
}
//Get row data
while (rs.next()) {
Vector<Object> row = new Vector<Object>(columns);
for (int i = 1;i<=columns; i++) {
row.addElement( rs.getObject(i));
//System.out.print(rs.getObject(i));
}
data.addElement( row );
}
rs.close();
stmt.close();
} catch(Exception e) {
System.out.println(e);
}
GUI.table = new JTable(data,columnNames);
Java:
Object obj;
for (int i=0;i<31;i++) {
//obj = table.getValueAt(i,2);
System.out.println(table.getValueAt(i,2));
}//Ende for
Sobald ich aber die tabelle wechsle (als auf Tabelle 2, die nur 11 Einträge hat) bekomme ich eine Exception:
Code:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 11 >= 11
at java.util.Vector.elementAt(Vector.java:427)
at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:632)
at javax.swing.JTable.getValueAt(JTable.java:2686)
at src.GUI$1.paintComponent(GUI.java:94)
at javax.swing.JComponent.paint(JComponent.java:1029)
at javax.swing.JComponent.paintChildren(JComponent.java:862)
at javax.swing.JComponent.paint(JComponent.java:1038)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5124)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1479)
at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1410)
at javax.swing.RepaintManager.paint(RepaintManager.java:1224)
at javax.swing.JComponent._paintImmediately(JComponent.java:5072)
at javax.swing.JComponent.paintImmediately(JComponent.java:4882)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:785)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:713)
19.0
at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:693)30.0
Diese wiederholt sich ein paar Mal mit einzelnen Werten aus der Tabelle2 zwischen den Exceptions.
Erwähnenswert: Wenn ich die For Schleife auf 11 begrenze, läuft es Problemlos durch, allerdings gibt er mir das Ergebnis 2x aus. Wieso?
Das Ziel ist es im Endeffekt die Werte als Linien-Diagramm darstellen zu lassen.
Java:
float wert;
int alt;
int x=580;
int x2=590;
int y=369;
int y2=369;
//wert = ((Float)obj).intValue();
// if (obj==null) { //<--???
// break;
// }//Ende if
// else {
// alt = (int)wert;
// g.drawLine(x+i*10,y,x2+i*10,y2);
// y=y2;
// y2=369-alt;}
}//Ende for
Half auch nicht:
Java:
if (table.getValueAt(i,2)==null) {break;}
else {
System.out.println(table.getValueAt(i,2));
}
Ich bedanke mich herzlichst wenn jemand einen Tipp zur Lösung findet
*EDIT:
Die Spalte die ausgelesen wird, ist in MySQL als Float definiert.