Java - Aktualisierung von JTable mit fireTableDataChanged();
Ich habe eine JTable in meinem Programm. Ich möchte Sie zu aktualisieren nach Klick auf JButton.
Ich schrieb:
DefaultTableModel myTable = new DefaultTableModel(celDatas,celNames);
JTable source = new JTable(myTable){public boolean isCellEditable(int rowIndex, int colIndex) {
return false;}};
JScrollPane pane = new JScrollPane(source);
(...)
start.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
query = "Select sal FROM EMP";
myTable =(DefaultTableModel)source.getModel();
myTable.fireTableDataChanged();
}
Das problem ist, dass id nicht aktualisieren meine Daten auf JTable.
Wie dieses problem zu beheben?
BEARBEITEN:
JTable angezeigt wird in meinem Kerl durch JScrollPane.
Ich mache nun Folgendes:
source = new JTable(myTable){public boolean isCellEditable(int rowIndex, int colIndex) {return false;}};
pane = new JScrollPane(source);
Machte ich auch eine neue leere, wo immer Daten aus der Datenbank + da ich definiere myTable:
void queryConnection() {
(...)
myTable = new DefaultTableModel(celDatas,celNames);
}
Hinzugefügt habe ich einen JButton, der update meiner JTable (wenn wir die Abfrage ändern.
start.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
query = "Select sal FROM EMP";
queryConnection();
}
}
================================================================================
public class Application2 implements Runnable {
private JTable source;
private JScrollPane pane;
private DefaultTableModel myTable;
private JPanel panel;
private String[][] celDatas = null;
private String[] celNames = null;
public void run() {
(...)
start.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
if(...) {
query = "Select sal FROM EMP";
queryConnection();
}
}
if(query == null) {
query = "Select * from EMP";
queryConnection();
}
source = new JTable(myTable){public boolean isCellEditable(int rowIndex, int colIndex) {return false;}};
pane = new JScrollPane(source);
pane.setSize(f.getSize().width-60,300);
pane.setLocation(30,20);
panel.add(pane);
f.add(panel);
f.pack();
}
void queryConnection() {
//here is connection and downloading datas
myTable = new DefaultTableModel(celDatas,celNames);
}
Ich hoffe, dass es jetzt bequemer? 😉
in dem obigen code, die Sie havent geändert nichts in der Quelle(DefaultTableModel)!
Für bessere Hilfe früher, nach einem SSCCE.
warum hast du neu eine JTable mit seinem Modell, hast du das Problem mit der Anzeige JTable nach JButton geklickt???
weil wenn ich auf JButton, erstellen, Daten in String-arrays celDatas und celNames. Wenn ich JTable, BEVOR JButton, es zeigt Fehler.
Für bessere Hilfe früher, nach einem SSCCE.
warum hast du neu eine JTable mit seinem Modell, hast du das Problem mit der Anzeige JTable nach JButton geklickt???
weil wenn ich auf JButton, erstellen, Daten in String-arrays celDatas und celNames. Wenn ich JTable, BEVOR JButton, es zeigt Fehler.
InformationsquelleAutor Ganjira | 2012-04-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Brauchen Sie nicht zu nennen, alle
fireXXX()
Methoden, wenn Sie erstellen ein neues TableModel, sondern Sie vor allem benötigen, rufen Sie diese, wenn Sie schreiben Ihre TableModel basierend auf AbstractTableModel (du bist nicht).Dein problem liegt woanders, denke ich. Sie scheinen zu sein, erstellen Sie eine neue JTable und hinzufügen, um einen neuen JScrollPane. Werden Sie das hinzufügen dieser Komponenten, um Ihre GUI (die du nicht zeigen)? Wenn ja, ist der container, die Sie hinzufügen möchten, zu akzeptieren, dass sich neue Komponenten reibungslos? Tun Sie revalidate und repaint den container? Ist Ihre neu erstellte JTable angezeigt werden in der GUI?
Oder, gibt es eine JTable bereits angezeigt wird in deine GUI? Wenn dem so ist, vielleicht alles, was Sie tun möchten ist, legen Sie seine Modell vielmehr eine neue JTable. Ich bevorzuge diese Lösung als die einfachste.
Bearbeiten 1
Würde ich etwas wie das tun:
setTableModel(...)
auf der aktuell angezeigten JTable und pass in meine neu erstellte DefaultTableModel-Objekt.Edit 2
Ganjira, für uns, in der Lage sein, am besten helfen Sie, wir müssen das problem verstehen besser, was ist der Grund, warum ich habe Sie gebeten, entweder die vollständige Klärung des Problems oder eine sscce, die ich gesehen habe, weder. Meine Probleme mit dem Verständnis der Fragen sind:
Edit 3
Sie Staat:
Und das verwirrt mich so die beste Lösung ist eine Lösung, die ich vorgeschlagen haben-alle zusammen-nicht eine neue JTable, sondern erstellen Sie ein neues DefaultTableModel und ändern das Modell für die vorhandenen JTable. Sie habe noch zu erwähnen, warum Sie nicht versuchen dieses, oder, wenn Sie es ausprobiert haben, wie es nicht funktioniert für Sie.
Lesen Sie tutorial zu JTable und legen Wert auf die
DefaultTableModel
, dann werden Sie nie benötigt, um die Pflege überfireXxxXxx()
,notice --->
nie zu nennenfireXxxXxx()
außerhalb derAbstractTableModels
MethodenIch nur hinzufügen JScrollPane auf meine GUI.
Werte sind in DefaultTableModel - DefaultTableModel myTable = new DefaultTableModel(celDatas,celNames); JTable Quelle = new JTable(myTable){public boolean isCellEditable(int rowIndex, int colIndex) { return false;}}; Aber es funktioniert nicht :/
Ich bearbeitet meine Frage.
InformationsquelleAutor Hovercraft Full Of Eels