मुझे बटन क्लिक के बाद ग्रिड सेल की सामग्री को प्रतिस्थापित करने की आवश्यकता है। उदाहरण के लिए: लेबल है और मुझे इसे टेक्स्ट के साथ प्रतिस्थापित करने की आवश्यकता है। क्या यह ग्रिडलाउट के साथ संभव है? मुझे एसडब्ल्यूटी का उपयोग करने की ज़रूरत है।SWT GridLayout में ग्रिड सेल की सामग्री को कैसे प्रतिस्थापित करें?
6
A
उत्तर
8
आप बस Label
का निपटान कर सकते हैं और अपनी जगह में एक नया Text
डाल सकते हैं। GridLayout
ग्रिड में स्थान निर्धारित करने के लिए बच्चों के जेड-ऑर्डर का उपयोग करता है, इसलिए आपको सही स्थान पर प्राप्त करने के लिए Text
पर moveAbove()
और moveBelow()
का उपयोग करना होगा। फिर माता-पिता पर layout()
पर कॉल करें। उदाहरण के लिए:
public class ReplaceWidgetComposite
extends Composite
{
private Label label;
private Text text;
private Button button;
public ReplaceWidgetComposite(Composite parent, int style)
{
super(parent, style);
setLayout(new GridLayout(1, false));
label = new Label(this, SWT.NONE);
label.setText("This is a label!");
button = new Button(this, SWT.PUSH);
button.setText("Press me to change");
button.addSelectionListener(new SelectionAdapter()
{
public void widgetSelected(SelectionEvent e)
{
text = new Text(ReplaceWidgetComposite.this, SWT.BORDER);
text.setText("Now it's a text!");
text.moveAbove(label);
label.dispose();
button.dispose();
ReplaceWidgetComposite.this.layout(true);
}
});
}
}
यह सही ढंग से काम नहीं करता है:
यहाँ कि वास्तव में दिखाता है मैं क्या मतलब है एक सरल विजेट है। यह कोड लेबल के बाद टेक्स्ट सेल के सम्मिलन का कारण बनता है, लेकिन मैं लेबल को प्रतिस्थापित करना चाहता था। निपटान() किसी भी तरह से ग्रिड से लेबल नहीं हटाता है क्योंकि यह अभी भी दिखाई देता है। – alhcr
विजेट को डिस्पोज़ करना इसे अपने माता-पिता से हटा देना चाहिए। 'Parent.layout (true)' को कॉल करने का प्रयास करें। –
ऐसा लगता है कि यह इस तरह काम नहीं करता है। मेरे पास shell.layout (सत्य) है; और मुझे पता है कि यह काम करता है क्योंकि टेक्स्ट डाला गया है और मैं इसे देखता हूं, लेकिन लेबल अभी भी दिखाई देता है। क्या आपने इसे कहीं इस्तेमाल किया था और यह सही ढंग से काम करता था? – alhcr