2010-05-05 120 views
0

我想建立一个小表来显示约会。 这是我到目前为止。也许你可以给我一个暗示我做错了什么,或者走哪条路。Java Swing:如何使用JTable工作?

  public class AppointmentTable extends JFrame{ 


     public static void main(String[] args) { 
      JTable table = new JTable(new AppointmentTableModel(10, 6, new ArrayList<Appointment>())); 
      JScrollPane scrollPane = new JScrollPane(table); 
      table.setFillsViewportHeight(true); 
      AppointmentTable frame = new AppointmentTable(); 
      frame.add(scrollPane); 
      frame.setVisible(true); 
     } 
    public class AppointmentTable extends JFrame{ 


    public static void main(String[] args) { 
     JTable table = new JTable(new AppointmentTableModel(10, 6, new ArrayList<Appointment>())); 
     JScrollPane scrollPane = new JScrollPane(table); 
     table.setFillsViewportHeight(true); 
     AppointmentTable frame = new AppointmentTable(); 
     frame.add(scrollPane); 
     frame.setVisible(true); 
    } 
    } 

    public class AppointmentTableModel extends AbstractTableModel { 
     private int columns; 
     private int rows; 
     ArrayList<Appointment> appointments; 

     public AppointmentTableModel(int columns, int rows, 
       ArrayList<Appointment> appointments) { 
      this.columns = columns; 
      this.rows = rows; 
      this.appointments = appointments; 
     } 

     @Override 
     public int getColumnCount() { 

      return columns; 
     } 

     @Override 
     public int getRowCount() { 

      return rows; 
     } 

     @Override 
     public Object getValueAt(int rowIndex, int columnIndex) { 

      return appointments.get(rowIndex).getByColumn(columnIndex); 
     } 
    } 

public class Appointment { 

    private Date date; 
    private Sample sample; 
    private String comment; 
    private ArrayList<Action> history; 

    public Appointment(Date date, Sample sample, String comment) { 
     this.date = date; 
     this.sample = sample; 
     this.comment = comment; 
     this.history = new ArrayList<Action>(); 
    } 

    public Object getByColumn(int columnIndex) { 
     switch (columnIndex) { 
     case 0: return date; 

     case 1: return date; 

     case 2: return sample; 

     case 3: return sample; 

     case 4: return history; 

     case 5: return comment; 


     } 
     return null; 
    } 

} 
public class Action { 
String action; 

public Action(String act){ 
    this.action=act; 
} 

} 
+0

有人可以给你的最好的建议(但这不是你的代码的问题的直接答案)将是使用GlazedLists(开源),将为您提供模型。 请注意,对于Appointment类(使用get/set方法)而不是使用将GUI(表中的列索引)与业务(约会数据)混合在一起的getByColumn(),这是很好的做法。 – jfpoilpret 2010-05-06 05:40:03

回答

1

首先,模型的getRowCount()方法不正确,应该是

public int getRowCount() { 
    return appointments.size(); 
} 

然后,你传递一个空的约会列表中你的模型,所以表显示了什么!

JTable table = new JTable(new AppointmentTableModel(10, 6, new ArrayList<Appointment>())); 

在创建表之前用一些数据初始化您的列表。