2010-07-06 13 views
12

giải pháp Qt là một cuộc gọi duy nhất để resizeColumnsToContent(), trong .NET ta có thể sử dụng TextRenderer.MeasureText(), JTable có thể sử dụng AUTO_RESIZE_ALL_COLUMNS.bảng SWT: tự động thay đổi kích thước tất cả các cột

Trong SWT, có cách nào để lập trình thay đổi kích thước cột sau khi điền chúng không?

Gọi computeSize(SWT.DEFAULT, SWT.DEFAULT) trả về cùng một giá trị, do đó bỏ qua ký tự còn lại trong cột.
TableColumn có setWidth(), nhưng làm cách nào để nhận gợi ý kích thước cho nội dung hiện tại có tính đến mặt phông chữ, v.v ...?

Trả lời

4

Trong nhiều trường hợp, các mục bảng thay đổi tại thời gian chạy để phản ánh những thay đổi trong mô hình dữ liệu. Thêm mục nhập vào mô hình dữ liệu cũng yêu cầu phải thay đổi kích thước các cột, nhưng trong trường hợp của tôi gọi .pack() sau khi sửa đổi mô hình không giải quyết hoàn toàn vấn đề. Trong phân biệt với đồ trang trí mục cuối cùng không bao giờ thay đổi kích cỡ. Đường nối này là do cập nhật trình xem bảng không đồng bộ. Điều này đã giải quyết được vấn đề của tôi:

public class LabelDecoratorProvider extends DecoratingStyledCellLabelProvider { 

    public LabelDecoratorProvider(IStyledLabelProvider labelProvider, 
     ILabelDecorator decorator, IDecorationContext decorationContext) { 
     super(labelProvider, decorator, decorationContext); 
    } 

    @Override 
    public void update(ViewerCell cell) { 
     super.update(cell); 
     if (TableViewer.class.isInstance(getViewer())) { 
      TableViewer tableViewer = ((TableViewer)getViewer()); 
      Table table = tableViewer.getTable(); 
      for (int i = 0, n = table.getColumnCount(); i < n; i++) 
       table.getColumn(i).pack(); 
     } 
    } 
} 
19

giải quyết với:

private static void resizeColumn(TableColumn tableColumn_) 
{ 
    tableColumn_.pack(); 

} 
private static void resizeTable(Table table_) 
{ 
    for (TableColumn tc : table.getColumns()) 
     resizeColumn(tc); 
} 
+14

Không phải là một chức năng của dòng chứ không phải là vô dụng? Tại sao không chỉ gọi gói trong resizeTable? – Buttons840

+1

Tôi đồng ý với bạn trong ví dụ trên, Buttons840. Nhưng chúng không vô ích, nếu bạn muốn làm cho 'một lớp lót' không thể đọc được rõ ràng hơn/dễ đọc hơn - để tên phương thức thể hiện tốt hơn những gì bạn làm. –