2010-01-15 43 views
12

tôi đã phát triển một tùy chỉnh JTableModel cơ bản như sauđúng nhận được dữ liệu từ một (sắp xếp) JTable

public class CustomTableModel extends DefaultTableModel { 
    List<MyClass> data; 
    public CustomTableModel(List<MyClass> data) { 
    this.data = data; 
    } 

    public Class<?> getColumnClass(int columnIndex) { 
    return MyClass.class; 
    } 

    public MyClass getValueAt(int rowIndex, int columnIndex) { 
    return data.get(rowIndex); 
    } 

    // ... 
} 

sau đó tôi sử dụng một tùy chỉnh JTableCellRenderer cơ bản như sau

public class CustomTableCellRenderer extends JLabel implements TableCellRenderer { 

    public Component getTableCellRendererComponent(JTable table, Object value, 
     boolean isSelected, boolean hasFocus, int row, int column) { 

    MyClass myClass = (MyClass)value; 

    lbl.setText(myClass.getString()); 

    return this; 
    } 
} 

Tôi cũng có một JPanel tùy chỉnh hiển thị thông tin khác nhau như sau

public class MyPanel extends JPanel { 
    private MyClass myClass; 

    public MyPanel(MyClass myClass) { 
    // initialize components 
    } 

    public setMyClass(MyClass myClass) { 
    this.myClass = myClass; 
    updateFields(); 
    } 

    private void updateFields() { 
    this.fieldString.setText(myClass == null ? "" : myClass.getString()); 
    // ... 
    } 
} 

Cuối cùng, tôi sử dụng một bảng liệt kê tôi d ata và bảng tùy chỉnh để hiển thị chi tiết dữ liệu đã chọn.

public class JCustomFrame extends JFrame { 
    public JCustomFrame(List<MyClass> data) { 
    // ... 
    JTable table = new JTable(new CustomTableModel(data)); 
    table.setDefaultRenderer(MyClass.class, new CustomTableCellRenderer()); 

    } 
} 

Những gì tôi đang cố gắng để hoàn thành là có được MyClass được chọn từ bảng bất kể sắp xếp.

Tôi đã thử ListSelectionListener nhưng các phương thức không trả lại bất kỳ điều gì khác ngoài các chỉ mục đã chọn. Ngay cả khi tôi có chỉ mục, nếu bảng được sắp xếp, mô hình của tôi không quá phức tạp và sẽ trả về đối tượng sai.

Trả lời

30

... Thậm chí nếu tôi có chỉ mục, nếu bảng được sắp xếp, mô hình của tôi không phải là quá phức tạp và sẽ trả lại đối tượng sai ...

Bạn phải sử dụng:

JTable.convertRowIndexToModel(int viewIndex)

Maps chỉ số của hàng về quan điểm cho TableModel tiềm ẩn. Nếu nội dung của mô hình không được sắp xếp, mô hình và các chỉ số xem đều giống nhau.

Với chỉ mục đó, bạn có thể truy cập vào mô hình bảng và xem đối tượng bạn cần là gì.

Note Bảng phân loại cùng với phương pháp này đã được giới thiệu trong Java 1.6

+1

Bạn có thể có được một JTable để hiển thị dữ liệu được sắp xếp khác so với các mô hình cơ bản? Làm thế nào để bạn có được nó để sắp xếp, và khi được giới thiệu này? –

+3

@Carl Smoticz: kể từ Java 1.6 tôi nghĩ – OscarRyz

Các vấn đề liên quan