2010-05-25 20 views
8

Lời nói đầu: Tôi kinh khủng với java, và tệ hơn với các thành phần java ui.Làm cách nào để cột JTable chứa các hộp kiểm?

Tôi đã tìm thấy một số hướng dẫn khác nhau về cách thêm nút vào bảng, tuy nhiên tôi đang gặp khó khăn khi thêm hộp kiểm. Tôi cần phải có một cột mà vẽ một hộp văn bản được đánh dấu mặc định (cell renderer tôi nghĩ rằng xử lý đó), sau đó bấm vào tickbox, unticks hộp, vẽ lại hộp nói, và cháy ra một sự kiện một nơi nào đó tôi có thể theo dõi.

hiện tại tôi có một cellrenderer tùy chỉnh:

public class GraphButtonCellRenderer extends JCheckBox implements TableCellRenderer { 
public GraphButtonCellRenderer() { 
} 
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
    if(isSelected) 
     setSelected(true); 
    else 
     setSelected(false); 
    setMargin(new Insets(0, 16, 0, 0)); 
    setIconTextGap(0); 

    setBackground(new Color(255,255,255,0)); 
    return this; 
}} 

Mà hiện handle vẽ hộp đánh dấu, nhưng chỉ có bọ ve và unticks hộp nếu hàng đó được chọn. Nhưng tôi không biết cách xử lý các sự kiện. Thực sự những gì tôi đang yêu cầu có thể là một liên kết đến một hướng dẫn tốt về cách thêm hộp kiểm một cách sạch sẽ vào một JTable. Bất kỳ trợ giúp được đánh giá rất cao :)

Trả lời

23

Không cần tạo trình kết xuất bảng của riêng bạn. Here's a simpler example. Chỉ cần tạo một mô hình bảng tùy chỉnh và đối với một cột trao trả lại Boolean lớp cho:

public Class getColumnClass(int column) 

Nếu bạn muốn cột là có thể chỉnh sửa, trở về đúng với

public boolean isCellEditable(int row, int column) 

JTable sẽ chăm sóc của đồ họa cho bạn.

Another example is here.

+0

+1 Điểm tốt; đơn giản hơn có thể đủ. Hướng dẫn mô tả một số trình kết xuất mặc định cho các lớp cụ thể. – trashgod

+0

Đã chấp nhận. Cảm ơn bạn rất nhiều vì các liên kết, chúng đủ đơn giản để tôi theo dõi/tích hợp với dự án hiện tại của tôi – theraven

4

Dưới đây là một đơn giản thay vì xây dựng example sử dụng một TableCellRendererTableCellEditor. Xem thêm, Concepts: Editors and Renderers.

Phụ lục: @Jay Điểm của Askren được thực hiện tốt. Trình kết xuất mặc định cho Boolean.class, như được mô tả trong hướng dẫn, có thể là tất cả những gì bạn cần.

+0

Cảm ơn bạn. Tôi đã không đi qua ví dụ cụ thể đó. Rất nhiều thứ đang xảy ra ... Tôi sẽ cho nó một vết nứt – theraven

3

Giải pháp đơn giản nhất là sử dụng DefaultTableModel và sử dụng đối tượng Boolean như các giá trị.

+0

yeah đúng vậy @Peter, Nhưng chúng tôi có thể cải thiện thêm bằng cách thêm một số giá trị (ID) vào hộp kiểm đó nếu chúng tôi muốn TRUE giá trị trở thành giá trị ID và FALSE vẫn còn giá trị FALSE? – gumuruh

5

Như Peter nói, dễ dàng sử dụng mở rộng lớp DefaultTableModel của nó, ví dụ:

class NewTableModel extends DefaultTableModel{ 
     public Class<?> getColumnClass(int columnIndex) { 
      return getValueAt(0, columnIndex).getClass(); 
     } 
    } 
-5

Trong Swing Designer thiết lập loại cột để boolean

+1

giải pháp này giả định OP đang sử dụng trình tạo giao diện người dùng của một số loại –