سؤال

ولدي عنصر مركب، الذي لديه في البداية تسمية. الآن أدعو التصرف على أنه (التسمية) وإنشاء تسمية أخرى في نفس الحاوية (الدردار مركب)، ولكن لا أرى النص الجديد. ذلك يقودني إلى السؤال كيف يمكنني تمكين إعادة رسم على المركبة، بحيث التسمية الجديدة (أو أي عنصر آخر وأنا قد خلق) سيجعل بدلا من القديم. هنا هو رمز لقد (فصل في اختبار وحدة لإعادة رسم مركب)

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، والتحقق من أن العنصر الجديد هو الحصول على الواقع إضافة إلى الحاويات مركب الأم أنا في عداد المفقودين شيء هنا؟

هل كانت مفيدة؟

المحلول

في وظيفة changeText()، و

<اقتباس فقرة>   

وtestCell.redraw();

ويجب أن يتم استبدال الخط من قبل

<اقتباس فقرة>   

وtestCell.layout();

وأو، إذا كنت ترغب في تغيير حجمه بشكل صحيح يجب عليك استخدام

<اقتباس فقرة>   

وshell.layout();.

نصائح أخرى

وأود أن أقول إضافة selectionListener على الملصق.

.addSelectionListener(new SelectionAdapter() {
    @Override
    public void widgetSelected(final SelectionEvent e) {
        //Change text by Label.setText();
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top