JTABLE aktualisieren / ändern

dasago

Mitglied
Hey Leute,

ich beschäftge mich nun seit zwei Tagen mit der JTable.. hab es aber noch nicht hinbekommen die Daten zu aktualisieren! Hab mir jetzt des Beispiel von Sun angeschaut:
http://java.sun.com/docs/books/tutorial/uiswing/components/table.html#modelchange
Hilft mir leider au nicht weiter. Hab auch hier im Forum geschaut und da gibts ja auch einiges zu diesem Thema, bekomm es aber nicht hin :( Wie kann ich meine aktuelle Tabelle aktualisieren? D.h. die aktuellen Daten ändern sich! Kann mir da einer weiterhelfen? Die Daten sollen sich dann per Knopfdruck ändern (erst einmal hart, später anders). Kann mir einer sagen wie dies funktioniert? Mit setValueAt funktioniert es nicht..! Falls jemand ein ganz andres Modell hat bin ich auch offen, aber die Zellen sollten nicht editierbar sein (die funktionalität ist ja hier gegeben).
Was ich auch schonmal hinbekommen habe, ist das die Tabelle sich ändert per DefaultTableModel, aber da bekomm ich es nicht hin, dass die Zellen nicht editierbar sind!
Falls jemand den Script möchte, kann ich diesen auch posten! Also hab zwei Wege, aber kein richtigen :D bzw. beide funktionieren nur halb!

Danke schon einmal für eure Hilfe


Code:
package test;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TableTest extends JPanel {
    private boolean DEBUG = false;
    public JTable table;
    private TableModel model;

    public TableSortDemo() {
        super(new GridLayout(1,0));

        table = new JTable(new MyTableModel());
        table.setPreferredScrollableViewportSize(new Dimension(500, 70));

        //Create the scroll pane and add the table to it.
        JScrollPane scrollPane = new JScrollPane(table);

        //Add the scroll pane to this panel.
        add(scrollPane);
    }

    class MyTableModel extends AbstractTableModel {
        String[] columnNames = {"Name", "Team", "T", "GT", "Punkte"};	
        private Object[][] data = {
            {"A", "A",  new Integer(1), new Integer(1), new Integer(1)},
            {"B", "B",  new Integer(2), new Integer(2), new Integer(2)},
            {"C", "C",  new Integer(3), new Integer(3), new Integer(3)},
            {"D", "D", new Integer(4), new Integer(4), new Integer(4)},
            {"E", "E", new Integer(5), new Integer(5), new Integer(5)},
        };

        public int getColumnCount() {
            return columnNames.length;
        }

        public int getRowCount() {
            return data.length;
        }

        public String getColumnName(int col) {
            return columnNames[col];
        }

        public Object getValueAt(int row, int col) {
            return data[row][col];
        }

        public Class getColumnClass(int c) {
            return getValueAt(0, c).getClass();
        }

        public boolean isCellEditable(int row, int col) {
                return false;
        }

        public void setValueAt(Object value, int row, int col) {
            if (DEBUG) {
                System.out.println("Setting value at " + row + "," + col
                                   + " to " + value
                                   + " (an instance of "
                                   + value.getClass() + ")");
            }
            data[row][col] = value;
            fireTableCellUpdated(row, col);
            table.repaint();
            if (DEBUG) {
                System.out.println("New value of data:");
                printDebugData();
            }
        }

        private void printDebugData() {
            int numRows = getRowCount();
            int numCols = getColumnCount();

            for (int i=0; i < numRows; i++) {
                System.out.print("    row " + i + ":");
                for (int j=0; j < numCols; j++) {
                    System.out.print("  " + data[i][j]);
                }
                System.out.println();
            }
            System.out.println("--------------------------");
        }
    }

    // Erstellt die Benutzeroberfläche
    private void createAndShowGUI() {
        JFrame frame = new JFrame("TableSortDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        TableTest newContentPane = new TableTest();
        newContentPane.setOpaque(true);
        frame.setContentPane(newContentPane);
              
        frame.add(getBtnUpdate());
        
        frame.pack();
        frame.setVisible(true);
    }
    
    private JButton getBtnUpdate(){
        JButton btnUpdate = new JButton("Text");        
        btnUpdate.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				// HIER DAS UPDATE / AKTUALISIERUNG
			}
		});
        return btnUpdate;
    }
    
    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
            	TableTest tbl = new TableTest();
                tbl.createAndShowGUI();
            }
        });
    }
}
 
Zuletzt bearbeitet:
Zurück