मेरे पास एक समग्र तत्व है, जिसमें प्रारंभ में लेबल होता है। अब मैं इसे (लेबल) पर निपटान करता हूं और उसी कंटेनर (समग्र एल्म) में एक और लेबल बनाता हूं, लेकिन मुझे नया टेक्स्ट नहीं दिखाई देता है। यह मुझे सवाल उठाने के लिए लाता है कि मैं समग्र पर रेड्रो कैसे सक्षम करूं, ताकि नया लेबल (या कोई अन्य घटक जो मैं बना सकता हूं) पुराने स्थान पर प्रस्तुत किया जाएगा। यहाँ कोड मैं (एक समग्र पुनः बनाने के लिए एक इकाई परीक्षण में विभाजित)एसडब्लूटी कंपोजिट - रेड्रो समस्या
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();
}
});
आप देख सकते हैं, मैं समग्र पर पुनः बनाने मैं एक नए तत्व जोड़े जाने के बाद बोल रहा हूँ है। साथ ही, मैंने सत्यापित किया है कि निपटने के लिए कॉल के बाद, testCell.getChildren() लंबाई की उम्मीद 0, जैसा कि अपेक्षित है, और जब मैं एक नया लेबल बनाता हूं, तो मुझे वही अभिव्यक्ति मिलती है जो 1 लौटने के लिए होती है, यह सत्यापित करते हुए कि नया तत्व वास्तव में हो रहा है अपने माता-पिता समग्र कंटेनर में जोड़ा गया क्या मुझे यहां कुछ याद आ रही है?
इस विषय को पुनर्जीवित करने के लिए क्षमा करें, लेकिन मैं हाल ही में इसी तरह की समस्या का समाधान और इस विषय के लिए मांग कर रहा था मैं 'shell.pack)' उपयोग करने के लिए (क्योंकि 'shell.layout था एक बहुत, लेकिन मेरी विंडो का आकार बदलने में मदद की() 'कुछ भी नहीं किया। हो सकता है कि यह किसी के लिए सहायक होगा। :) – mykola
@mykola: 'shell.pack() 'ने मेरी खिड़की को छोटा बनाया और इसे फिर से खींचा, लेकिन' shell.layout() 'ने इसे दोबारा हटा दिया और उसका आकार रखा। मैं 'shell.open()' के बाद एक विंडो में नियंत्रण जोड़ रहा था और नियंत्रण दिखाई नहीं दे रहे थे। 'shell.layout() 'इसे हल किया। – gregn3
लेआउट() पर जावाडोक को देखते हुए, 'testCell.requestLayout();' बेहतर भी होगा – titou10