我已经学会了使用NotifyDescriptor创建一个弹出对话框。我设计了一个带有两个大按钮的JPanel,它们分别显示PURCHASECASHOUT,并且我使用的代码在底部显示了另外两个按钮,分别显示YesNo。我不希望NotifyDescriptor在屏幕上放置其自己的按钮。我只希望我的按钮在那里并且单击我的自定义按钮之一时,弹出窗口将关闭并存储值(就像单击yesno时如何关闭窗口)。我正在使用的代码如下

       //创建面板实例,扩展JPanel ...
        ChooseTransactionType popupSelector = new ChooseTransactionType();

        //创建一个自定义的NotifyDescriptor,将面板实例指定为参数+其他参数
        NotifyDescriptor nd =新的NotifyDescriptor(
                popupSelector,//面板实例
                “标题”,//对话框标题
                NotifyDescriptor.YES_NO_OPTION,//是/否对话框...
                NotifyDescriptor.QUESTION_MESSAGE,// ...问题类型=>问号图标
                null,//我们指定了YES_NO_OPTION =>可以为null,L&F指定的选项,
                      //否则将选项指定为:
                      // new Object [] {NotifyDescriptor.YES_OPTION,...等等。},
                NotifyDescriptor.YES_OPTION //默认选项为“是”
        );

        //现在让我们显示对话框...
        如果(DialogDisplayer.getDefault()。notify(nd)== NotifyDescriptor.YES_OPTION){
            //用户单击“是”,在此处执行操作,例如:
                System.out.println(popupSelector.getTRANSACTION_TYPE());
        }

最佳答案

为了替换options按钮上的文本,您可以为String[]参数传递options,或者,如果需要更多控制,则可以传递JButton[]。因此,在您的情况下,您需要从message面板中删除按钮,并为String[]参数传递options

对于initialValue(最后一个参数),您可以使用任何一个NotifyDescriptor.YES_OPTION值(“购买”或“现金”)来代替使​​用String[]DialogDisplayer.notify()方法将返回选择的任何值。因此,在这种情况下,它将返回String,但是如果您传递JButton[],则返回的值将是JButton

String initialValue = "Purchase";
String cashOut = "Cashout";
String[] options = new String[]{initialValue, cashOut};

NotifyDescriptor nd = new NotifyDescriptor(
            popupSelector,
            "Title",
            NotifyDescriptor.YES_NO_OPTION,
            NotifyDescriptor.QUESTION_MESSAGE,
            options,
            initialValue
    );

String selectedValue = (String) DialogDisplayer.getDefault().notify(nd);
if (selectedValue.equals(initialValue)) {
    // handle Purchase
} else if (selectedValue.equals(cashOut)) {
    // handle Cashout
} else {
    // dialog closed with top close button
}

关于java - 在Netbeans平台中使用自定义NotifyDescriptor,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10306967/

10-10 14:06