gpt4 book ai didi

java - 保持 TrayDialog 打开并提交数据

转载 作者:行者123 更新时间:2023-12-02 05:49:24 25 4
gpt4 key购买 nike

我有一个对话框,它扩展了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()对话框将不会关闭。 Source :

protected void okPressed() {
setReturnCode(OK);
close();
}

为了将数据传回 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;
}

在这种情况下,您需要在某个时候手动关闭对话框。另外,如果您使用 setBlockOnOpen(false);,Dialog 不会阻塞执行线程。

关于java - 保持 TrayDialog 打开并提交数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23709756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com