2012-06-05 45 views
5

Tôi đang cố gắng xây dựng một cây SWT có biểu tượng ở cấp cao nhất nhưng không ở cấp độ tiếp theo.Xóa hình ảnh SWT TreeItem thụt lề

Tree Screenshot

Có cách nào để tránh những khoảng trống mà dường như đã bị bỏ lại cho hình ảnh mà tôi không sử dụng? Tôi đã thử sử dụng đoạn mã sau nhưng không làm những gì tôi muốn.

SWT.MeasureItem:

tree.addListener(SWT.MeasureItem, new Listener() 
{ 
    @Override 
    public void handleEvent(Event event) 
    { 
    TreeItem item = (TreeItem)event.item; 
    Image image = item.getImage(); 
    if (image == null) 
    { 
     event.x -= 40; 
    } 
    } 
}); 

SWT.PaintItem:

tree.addListener(SWT.PaintItem, new Listener() 
{ 
    @Override 
    public void handleEvent(Event event) { 
    TreeItem item = (TreeItem)event.item; 
    Image image = item.getImage(); 
    if (image == null) 
    { 
     event.x -= 40; 
    } 
    } 
}); 

Trong cả hai trường hợp tôi chỉ hy vọng rằng các văn bản có thể được rút ra một chút nữa sang bên trái.

Trả lời

1

Tôi đã tự mình thực hiện một số điều tra khác. Theo câu trả lời của Eugene, đây có vẻ là hành vi bản địa. Có một vài điều đáng chú ý.

Nếu không có mục nào trong cây có biểu tượng thì không còn dấu cách nào cho biểu tượng. Tuy nhiên, ngay cả một mục duy nhất có biểu tượng sẽ khiến tất cả các mục để lại không gian cho các biểu tượng.

Một giải pháp hacky có thể được thực hiện như sau:

  • Sử dụng không có biểu tượng để kiểm soát nguồn gốc lá không có không gian biểu tượng
  • Đối với các mặt hàng mà bạn muốn một tiền tố biểu tượng một số không gian để các văn bản ví dụ "" + Văn bản
  • Thêm một người biết lắng nghe PaintItem thu hút vào biểu tượng bạn muốn vào không gian còn lại của văn bản

Điều này có lẽ không hoạt động tốt trên các nền tảng và trên phông chữ hệ thống vì vậy tôi vừa quyết định sống với các biểu tượng.

2

Hành vi này đến từ các điều khiển gốc và dành riêng cho hệ điều hành (AFAIR, trên máy Mac, bạn sẽ không thấy vấn đề này). Than ôi, không sửa lỗi dễ dàng nhưng thêm một số biểu tượng chung chung (hoặc không thêm biểu tượng nào cả).