2008-12-16 12 views

Antwort

5
//defined somewhere 
List<List<String>> lists = .... 

String[][] array = new String[lists.size()][]; 
String[] blankArray = new String[0]; 
for(int i=0; i < lists.size(); i++) { 
    array[i] = lists.get(i).toArray(blankArray); 
} 

Ich weiß nichts über JTable, aber die Konvertierung einer Liste von Listen in Array kann mit ein paar Zeilen erfolgen.

7

Für JTable insbesondere, würde ich Subklassifizieren AbstractTableModel wie so vorschlagen:

class MyTableModel extends AbstractTableModel { 
    private List<List<String>> data; 
    public MyTableModel(List<List<String>> data) { 
     this.data = data; 
    } 
    @Override 
    public int getRowCount() { 
     return data.size(); 
    } 
    @Override 
    public int getColumnCount() { 
     return data.get(0).size(); 
    } 
    @Override 
    public Object getValueAt(int row, int column) { 
     return data.get(row).get(column); 
    } 
    // optional 
    @Override 
    public void setValueAt(Object aValue, int row, int column) { 
     data.get(row).set(column, aValue); 
    } 
} 

Hinweis: Dies ist die einfachste Implementierung möglich ist; Fehlerüberprüfung wird der Kürze halber weggelassen.

Mit einem solchen Modell müssen Sie sich keine Gedanken über sinnlose Konvertierungen zu Object[][] machen.

+0

Gute Antwort. Überprüfen Sie jedoch, ob die an dieses Modell übergebenen Daten an anderer Stelle nicht sichtbar sind und anfällig für die Ninja-Bearbeitung sind. Es ist wahrscheinlich nicht, aber wenn es ist, muss es hier vielleicht geklont werden. –

+0

Guter Punkt. Ich habe daran gedacht, aber DefaultTableModel prüft auch nicht (es verwendet Vektoren). Wie auch immer, dies ist die grundlegendste Implementierung, die möglich ist. ;) –