بسم الله الرحمن الرحيم / JFace: إزالة الحاجيات

StackOverflow https://stackoverflow.com/questions/704486

  •  22-08-2019
  •  | 
  •  

سؤال

Group group = new Group(parent, SWT.NONE);
StyledText comment = new StyledText(group, SWT.BORDER_DASH);

وهذا يخلق مجموعة مع مساحة النص داخل.

وكيف يمكنني في وقت لاحق حذف النص (إزالته من الشاشة بحيث يمكنني استبدالها بشيء آخر)؟

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

المحلول

استخدم Widget.dispose.

public class DisposeDemo {
  private static void addControls(final Shell shell) {
    shell.setLayout(new GridLayout());
    Button button = new Button(shell, SWT.PUSH);
    button.setText("Click to remove all controls from shell");
    button.addSelectionListener(new SelectionListener() {
      @Override public void widgetDefaultSelected(SelectionEvent event) {}
      @Override public void widgetSelected(SelectionEvent event) {
        for (Control kid : shell.getChildren()) {
          kid.dispose();
        }
      }
    });
    for (int i = 0; i < 5; i++) {
      Label label = new Label(shell, SWT.NONE);
      label.setText("Hello, World!");
    }
    shell.pack();
  }

  public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);
    addControls(shell);
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch()) {
        display.sleep();
      }
    }
    display.dispose();
  }
}

نصائح أخرى

وثمة خيار آخر هو استخدام StackLayout للتبديل بين الكامنة ضوابط. وهذا يمنعك من الوقوع في الخطأ "تم التخلص من القطعة".

لديك إما استدعاء comment.changeParent(newParent) أو comment.setVisible(false) لإزالة / يهربها من المجموعة. أنا غير متأكد إذا comment.changeParent(null) ستعمل ولكن أود أن تعطي هذا المحاولة.

ونحن نفعل ذلك بهذه الطريقة لأنه سبحانه وتعالى يستخدم نمط مركب .

وgroup.getChildren()[0].dispose() سيزيل الطفل الأول. عليك أن تجد وسيلة للتعرف على الطفل الدقيق الذي تريد حذفه. كان من الممكن المقارنة بين الهوية. يمكنك القيام بذلك باستخدام setData / getData على أن التحكم:

وعلى سبيل المثال:

StyledText comment = new StyledText(group, SWT.BORDER_DASH);
comment.setData("ID","commentEditBox");

وبعد ذلك:

for (Control ctrl : group.getChildren()) {
 if (control.getData("ID").equals("commentEditBox")) {
   ctrl.dispose();
   break;
 }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top