2011-06-24 117 views
5

Tôi có JTable sau (Thực ra đây là một ETable từ Netbeans). Nó trải dài trên khắp các thùng chứa nó trong - Tôi muốn giữ đó, và không sử dụng JTable.AUTO_RESIZE_OFFCột JTable tự động/phù hợp nhất, nhưng kéo cột cuối cùng

enter image description here

Tôi muốn để phù hợp với chương trình khác như dưới đây, thay đổi kích thước mỗi cột để phù hợp với những chỉ nội dung ô hoặc văn bản tiêu đề cột và có cột ngoài cùng bên phải lấp đầy khoảng trống còn lại. Làm thế nào tôi có thể làm điều đó ?

enter image description here

+0

thấy hướng dẫn này: [Bảng Cột Adjuster] (http://tips4java.wordpress.com/2008/11/10/bảng-cột-điều chỉnh /) –

Trả lời

0

Bạn có thể tắt tự động thay đổi kích thước. Trong trường hợp này, các cột sẽ tự động thay đổi kích thước theo nội dung. Nhưng trong trường hợp này, nếu tổng chiều rộng cột nhỏ hơn chiều rộng của bảng, khoảng trống sẽ nằm ở bên phải. Nếu nó lớn hơn, thanh cuộn ngang sẽ xuất hiện.

Bạn có thể chỉ định độ rộng ưa thích cho mỗi cột bằng cách sử dụng TableColumn.setPreferredWidth. Swing sẽ cố gắng phân phối thêm không gian theo đó. Nhưng điều này cũng không được bảo đảm.

0

Bạn phải đặt autoResize thành OFF (setAutoResizeMode(JTable.AUTO_RESIZE_OFF);), nhưng bạn cũng cần một phương thức trợ giúp để thay đổi kích thước các cột của mình.

Đây là bên trong một lớp tùy chỉnh mà kéo dài JTable, nhưng bạn có thể cũng giống như dễ dàng tham khảo một JTable hiện:

public void resizeColumnWidth() { 
    int cumulativeActual = 0; 
    int padding = 15; 
    for (int columnIndex = 0; columnIndex < getColumnCount(); columnIndex++) { 
     int width = 50; // Min width 
     TableColumn column = columnModel.getColumn(columnIndex); 
     for (int row = 0; row < getRowCount(); row++) { 
      TableCellRenderer renderer = getCellRenderer(row, columnIndex); 
      Component comp = prepareRenderer(renderer, row, columnIndex); 
      width = Math.max(comp.getPreferredSize().width + padding, width); 
     } 
     if (columnIndex < getColumnCount() - 1) { 
      column.setPreferredWidth(width); 
      cumulativeActual += column.getWidth(); 
     } else { //LAST COLUMN 
      //Use the parent's (viewPort) width and subtract the previous columbs actual widths. 
      column.setPreferredWidth((int) getParent().getSize().getWidth() - cumulativeActual); 
     } 
    } 
} 

Gọi resizeColumnWidth() bất cứ khi nào bạn thêm một hàng.

Tùy chọn thêm một người biết lắng nghe để bàn để các cột cũng được thay đổi kích cỡ khi bảng riêng của mình được thay đổi kích cỡ:

public MyCustomJTable() { 
    super(); 
    addHierarchyBoundsListener(new HierarchyBoundsAdapter() { 
     @Override 
     public void ancestorResized(HierarchyEvent e) { 
      super.ancestorResized(e); 
      resizeColumnWidth(); 
     } 
    }); 
    setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
} 
Các vấn đề liên quan