2012-04-12 9 views
1

Wie beziehe ich die erste Spalte einer JTable mithilfe von AbstractTableModel vor?Füllen der ersten Spalte einer JTable

Ich möchte Zeitschlitze in die erste Spalte einfügen und dann die anderen Spalten mit etwas anderem füllen.

OK, damit das ChannelTableModel von JTables in der GUI verwendet wird. Im Grunde legt es Zeitfenster von 30 Minuten von 6.30 bis 24.00 Uhr fest. Die Zeitschlitze müssen in die erste Zeile einer JTable gesetzt werden.

Irgendwie muss ich eine Variable 'row' setzen, um die Zeilenwerte im AbstractTableModel zu bekommen, was ich schwierig finde.

Unten ist der Code so weit.

Code:

import java.util.List; 
import javax.swing.table.AbstractTableModel; 


public class ChannelTableModel extends AbstractTableModel 
{ 


    public ChannelTableModel(List<Program> schedule) 
    { 
     this.channel= schedule; 
    } 


    public int getColumnCount() 
    { 
     return 3; 
    } 


    public int getRowCount() 
    { 
     return 37; 
    } 


    public Object getValueAt(int rowIndex, int columnIndex) 
    { 

     switch (columnIndex) 
     { 
     case 0: return 6+((row*30)/60)+":"+(row % 2 == 0 ? "00" : "30") + " - " + (6 +(((row+1)*30)/60)+":"+(row % 2 != 0 ? "00" : "30")); 
     default: return "Not Available."; 
     } 

    } 

} 

Wie erstelle ich die Variable "Reihe", um das Tablemodel praktikabel zu machen?

+0

AbstractTableModel ist abstrakt und kann daher ohne weitere Implementierung nicht verwendet werden. Können Sie etwas Code posten, um zu zeigen, was Sie tun? – ControlAltDel

+0

_Wie erstelle ich die Variable "row", um das TableModel funktionsfähig zu machen? _ 'RowIndex' welches als Parameter an diese Methode übergeben wird, ist die Zeile ... warum nicht diese verwenden? – Robin

+0

Siehe auch ['EnvTableTest'] (http://stackoverflow.com/a/9134371/230513). – trashgod

Antwort

0

Oft werden Sie nur spezielle Fall die erste Spalte. z.B. wenn die "echten Daten" in einer Matrix sind. Schematisch:

public class AddColumn0TableModel extends AbstractTableModel { 

    final int columnCount, rowCount; 
    final Object wrappedData[][]; 

    public AddColumn0TableModel(Object[][] wrappedData) { 
     this.wrappedData = wrappedData; 
     // assume nice square data, YMMV 
     columnCount= 1 + wrappedData.length; 
     rowCount = wrappedData[0].length; 
    } 

    public int getRowCount() { return rowCount; } 

    public int getColumnCount() { return columnCount; } 

    public Object getValueAt(int row, int column) { 
     if (column == 0) 
     // implement this, in your case the time slot 
     return theSpecialThingForColumn0(row); 
     else 
      return wrappedData[column-1][row]; 
    } 

} 

p.s. Es gibt eine 50/50 Chance, dass ich die Reihenfolge falsch auf der Matrix im Vergleich zu Ihrer Bestellung habe. :-)