Tôi có thành phần hỗn hợp, ban đầu có một Nhãn. Bây giờ tôi gọi vứt bỏ nó (nhãn) và tạo nhãn khác trong cùng một thùng chứa (composite elm), nhưng tôi không thấy văn bản mới. Nó mang lại cho tôi để đặt câu hỏi làm thế nào để tôi cho phép vẽ lại trên composite, để các nhãn mới (hoặc bất kỳ thành phần nào khác tôi có thể tạo ra) sẽ render ở vị trí cũ. Đây là mã tôi có (tách thành một thử nghiệm đơn vị cho vẽ lại một hỗn hợp)Kết hợp SWT - vẽ lại vấn đề
private Label createLabel(Composite parent) {
Label label = new Label(parent, SWT.NONE);
label.setAlignment(SWT.CENTER);
label.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true));
return label;
}
private void changeText() {
assert testCell != null : "Please initialize test cell";
testCell.getChildren()[0].dispose();
Label l = createLabel(testCell);
l.setText("New TexT");
testCell.redraw();
}
private void draw() {
Display display = new Display();
shell = new Shell(display);
shell.setLayout(new GridLayout(2,false));
testCell = new Composite(shell,SWT.BORDER);
testCell.setLayout(new GridLayout());
Label l = createLabel(testCell);
l.setText("Old Text");
Composite btnCell = new Composite(shell,SWT.NONE);
btnCell.setLayout(new GridLayout());
Button b = new Button(btnCell, SWT.PUSH);
b.setText("Change");
b.addListener(SWT.MouseDown, new Listener() {
public void handleEvent(Event e) {
changeText();
}
});
Như bạn thấy, tôi kêu gọi vẽ lại trên hợp sau khi tôi thêm một yếu tố mới. Ngoài ra, tôi đã xác minh rằng sau khi cuộc gọi để xử lý, testCell.getChildren(). Length trả về 0, như mong đợi, và khi tôi tạo một nhãn mới, tôi nhận được biểu thức tương tự để trả về 1, xác minh rằng phần tử mới thực sự nhận được được thêm vào thùng chứa hỗn hợp gốc của nó Tôi có thiếu gì đó ở đây không?
Xin lỗi vì làm sống lại chủ đề này, nhưng tôi gần đây đã được tìm kiếm giải pháp của vấn đề tương tự và chủ đề này đã giúp rất nhiều nhưng để thay đổi kích thước cửa sổ của tôi, tôi đã phải sử dụng 'shell.pack()' vì 'shell.layout() 'không làm gì cả. Có thể nó sẽ hữu ích cho ai đó. :) – mykola
@mykola: 'shell.pack()' làm cho cửa sổ của tôi nhỏ hơn và vẽ lại nó, nhưng 'shell.layout()' đã vẽ lại nó và giữ kích thước của nó. Tôi đã thêm điều khiển vào một cửa sổ sau 'shell.open()' và các điều khiển không hiển thị. 'shell.layout()' đã giải quyết nó. – gregn3
Với javadoc trên layout(), 'testCell.requestLayout();' thậm chí còn tốt hơn – titou10