2017-03-11 15 views
0

Ich habe ein JTable 4x4 mit Standardwerten. Der Benutzer kann die JTable-Größe ändern. Nach Änderung der Größe z. 6x6, Standardwerte werden gelöscht und der Benutzer kann seine eigenen eingeben. Wie bekomme ich sie zu einem Integer-Tisch? Ich versuchte, getValueAt() und setValueAt() aus meiner Modellklasse zu verwenden, aber JTable-Felder wurden immer gelöscht, nachdem auf eine andere Zelle geklickt wurde.So erhalten Sie den Wert von der Größe JTable

class MyTableModel extends AbstractTableModel { 

int size; 
private String[] columnNames = { "Stan 1", "Stan 2", "Stan 3", "Stan 4" }; 

private Object[][] defaultValues = new Object[][] { 
     { "5", "15", "10", "0"}, 
     { "10", "10", "-20", "30"}, 
     { "40", "0", "50", "-30"}, 
     { "60", "0", "20", "-10"}}; 

private Object[][] newData = null; 

public MyTableModel(int x) { 
    size = x; 
} 

@Override 
public int getRowCount() { 
    return size; 
} 

@Override 
public int getColumnCount() { 
    return size; 
} 

@Override 
public String getColumnName(int columnIndex) { 
    if(columnIndex == 0) return null; 
    else return "Stan " + Integer.toString(columnIndex); 
} 

@Override 
public Class getColumnClass(int columnIndex) { 
    return Integer.class; 
} 

@Override 
public boolean isCellEditable(int rowIndex, int columnIndex) { 
    return true; 
} 

@Override 
public Object getValueAt(int rowIndex, int columnIndex) { 
    if(size == 4) 
     return defaultValues[rowIndex][columnIndex]; 
    else { 
     newData = new Object[size][size]; 
     return newData[rowIndex][columnIndex]; 
    } 
} 

@Override 
public void setValueAt(Object value, int rowIndex, int columnIndex) { 
    if(size == 4) 
     defaultValues[rowIndex][columnIndex] = value; 
    else 
     newData[rowIndex][columnIndex] = value; 

    fireTableCellUpdated(rowIndex, columnIndex); 
} 
} 
+0

Bitte geben Sie eine gültige [mcve] ein, damit wir Ihren Code selbst ausführen und testen können. Dies sollte ein kleines Programm sein, klein genug, um auf dieser Seite als Code-formatierten Text zu posten, sollte dein Problem kompilieren, ausführen und zeigen. –

Antwort

1

Es besteht keine Notwendigkeit für ein benutzerdefiniertes Tablemodel oder getValueAt (...) und setValueAt (...) -Methode außer Kraft zu setzen. Wenn Sie die Daten in DefaultTableModel ändern möchten, können Sie einfach die setDataVector(...) Methode verwenden.

Verwandte Themen