Ich habe mal den in Kapitel aufgeführten "einfachen Weg" etwas editiert.
Das sieht bei mir dann so aus:
data.getMeasuresString() gibt ein String[][] zurück
[highlight=Java]import javax.swing.table.AbstractTableModel;
class Model extends AbstractTableModel{
private String[][] datas;
public Model(DBController data){
datas = data.getMeasuresString();
}
// Die Anzahl Columns
public int getColumnCount() {
return datas[0].length;
}
// Die Anzahl Rows
public int getRowCount() {
return datas.length;
}
// Die Titel der einzelnen Columns
public String getColumnName(int column) {
return "String";
}
// Der Wert der Zelle (rowIndex, columnIndex)
public Object getValueAt(int rowIndex, int columnIndex) {
return datas[ rowIndex ][ columnIndex ];
}
// Eine Angabe, welchen Typ von Objekten in den Columns angezeigt werden soll
public Class getColumnClass(int columnIndex) {
return String.class;
}
// Jede Zelle ist editierbar
public boolean isCellEditable(int rowIndex, int columnIndex) {
return true;
}
// Wird aufgerufen, falls der Wert einer Zelle verändert wurde
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
datas[ rowIndex ][ columnIndex ] = aValue.toString();
}
}[/highlight]
Meine GUI.Java
[highlight=Java]
import java.awt.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
import java.io.IOException;
import javax.swing.table.DefaultTableModel;
public class GUI {
public JTextArea input;
public JTable table;
public static DBController data = new DBController();
public JPanel panelWest;
public String[][] datas;
Model model = new Model(data);
JFrame frame = new JFrame("Datenbank");
String[] titel = {"Frequenz", "Re(Z)", "Img(Z"};
String[][] a = {{"a","b","c"},{"d","e","f"}};
public GUI() {
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new BorderLayout());
input = new JTextArea("....");
JButton open = new JButton("open file");
JPanel panelNorth = new JPanel();
JPanel panelWest = new JPanel();
table = new JTable( model );
table.setModel(new DefaultTableModel());
JScrollPane pane = new JScrollPane(table);
panelWest.add(pane);
JPanel panelCenter = new JPanel();
panelCenter.add(input);
panelCenter.add(open);
frame.add(panelNorth, BorderLayout.NORTH);
frame.add(panelWest, BorderLayout.WEST);
frame.add(panelCenter, BorderLayout.CENTER);
open.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// DBController data = new DBController();
try {
data.chooser();
} catch (FileNotFoundException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
input.setText(data.getParameters());
update();
}
});
frame.setSize(600, 500);
frame.setVisible(true);
}
//Diese Methode sollte die JTable table mit dem Inhalt data.getMeasuresString() füllen
public void update() {
table.setModel( model );
}
}
[/highlight]
das ganze gibt mir aber eine NullPointerException beim compilieren, obwohl das Model erst bei actionevent eines Buttons aufgeruft werden soll. :rtfm:
Kann es sein dass er ein Problem hat dass
[highlight=Java] Model model = new Model(data);[/highlight]
den NPE verursacht weil data.getMeasuresString(); noch leer ist?
Mir fehlt da Momentan etwas der Durchblick
