Java 保持TrayDialog打开并提交数据
我有一个对话框,它扩展了Java 保持TrayDialog打开并提交数据,java,eclipse-rcp,Java,Eclipse Rcp,我有一个对话框,它扩展了TrayDialog,从用户那里收集一些数据。我想在不关闭对话框的情况下将收集到的值传递给另一个类。如果我重写okPressed()方法,数据将传回,但窗口将关闭 public class MyDialog extends TrayDialog { public MyDialog(final Shell shell, final MyData mydata) { super(shell); this.shell = shell;
TrayDialog
,从用户那里收集一些数据。我想在不关闭对话框的情况下将收集到的值传递给另一个类。如果我重写okPressed()
方法,数据将传回,但窗口将关闭
public class MyDialog extends TrayDialog {
public MyDialog(final Shell shell, final MyData mydata) {
super(shell);
this.shell = shell;
this.mydata = mydata;
}
@Override
protected void okPressed() {
if (!validateData()) {
return;
}
super.okPressed();
}
//rest of the code for text box, buttons in the dialog
}
final MyDialog myDialog = new MyDialog(new Shell(), this.mydata);
if (myDialog.open() == Window.CANCEL) {
return null;
}
//here get the data that user has entered in the dialog after they press ok
如果不调用
super.okPressed()
对话框将不会关闭:
为了将数据传递回操作,我建议提供对MyDialog的回调。大概是这样的:
public interface MyCallback {
void okPressed(MyData data);
}
public class MyDialog extends TrayDialog {
public MyDialog(final Shell shell, final MyData mydata, MyCallback callback) {
super(shell);
this.shell = shell;
this.mydata = mydata;
this.callback = callback;
}
@Override
protected void okPressed() {
if (!validateData()) {
return;
} else {
callback.onPressed(data);
}
//super.okPressed();
}
MyCallback callback = new MyCallback() {
void okPressed(MyData data) {
// handle data
}
}
final MyDialog myDialog = new MyDialog(new Shell(), this.mydata, callback);
if (myDialog.open() == Window.CANCEL) {
return null;
}
在这种情况下,您需要在某个时候手动关闭对话框。此外,如果使用,对话框将不会阻止执行线程
public interface MyCallback {
void okPressed(MyData data);
}
public class MyDialog extends TrayDialog {
public MyDialog(final Shell shell, final MyData mydata, MyCallback callback) {
super(shell);
this.shell = shell;
this.mydata = mydata;
this.callback = callback;
}
@Override
protected void okPressed() {
if (!validateData()) {
return;
} else {
callback.onPressed(data);
}
//super.okPressed();
}
MyCallback callback = new MyCallback() {
void okPressed(MyData data) {
// handle data
}
}
final MyDialog myDialog = new MyDialog(new Shell(), this.mydata, callback);
if (myDialog.open() == Window.CANCEL) {
return null;
}