errorPopup= popFactory.getPopup(this, errorBox,
(verifierTopComponent.super.getX()+verifierTopComponent.super.getWidth()/2),
(verifierTopComponent.super.getY()+verifierTopComponent.super.getHeight()/2));
上面的代码可以正常工作,并正确地将弹出框居中…但只有当窗口全屏时,在我的主显示器上。
我如何使它更健壮?我想把它放在当前RCP实例的中间。
(verifierTopComponent是我在模块中错误命名的TopComponent)。
看完下面的评论,我想知道你们是否都使用了一种截然不同的方法来创建弹出窗口?我只是想让用户看到一些东西,让他们知道为什么事情不会像他们做的那样起作用。
当使用NetBeans RCP时,您应该使用dialogdisplay和DialogDescriptor
像这样:
DialogDescriptor dd = new DialogDescriptor(errorBox, "Error message");
Object result = DialogDisplayer.getDefault().notify(dd);
它会自动计算正确的位置
我不确定如何解决您的具体问题,但根据我的经验,您可以/应该使用NetBeans的org.openide.NotifyDescriptor
类向用户显示通知。你需要在你的模块中添加Dialog API的依赖项来使用下面的代码。
NotifyDescriptor nd = new NotifyDescriptor(
"This is the message that will go in the main body of the message. This could also be a custom JPanel",
"Title of Dialog",
NotifyDescriptor.DEFAULT_OPTION,
NotifyDescriptor.ERROR_MESSAGE,
null, // this could be an array of JButtons that will replace the dialog's built-in buttons
NotifyDescriptor.OK_OPTION);
Object returnedValue = DialogDisplayer.getDefault().notify(nd);
if (returnedValue == NotifyDescriptor.OK_OPTION) {
// user pressed OK button
}
与往常一样,请参阅javadoc的NotifyDescriptor获取更多信息
编辑如另一个答案所述,您可以使用DialogDescriptor类,它扩展了NotifyDescriptor类,并添加了将对话框设置为模式的能力以及其他一些有用的功能。
还有一些其他有用的类可以扩展NotifyDescriptor类,这些类可能对其他情况有用。查看javadoc的NotifyDescriptor以获取子类列表。