Использование пользовательского дескриптора NotifyDescriptor на платформе Netbeans

Я научился создавать всплывающее диалоговое окно с помощью NotifyDescriptor. Я разработал JPanel с двумя большими кнопками, которые читаются как PURCHASE и CASHOUT, а код, который я использовал, показывает еще две кнопки внизу, которые читаются как Yes и No. Я не хочу, чтобы NotifyDescriptor размещал на экране свои собственные кнопки. Я просто хочу, чтобы мои кнопки были там, и всплывающее окно закрывалось и сохраняло значение при нажатии одной из моих пользовательских кнопок (точно так же, как оно закрывает окно при нажатии yes или no). Код, который я использую, выглядит следующим образом

       // Create instance of your panel, extends JPanel...
        ChooseTransactionType popupSelector = new ChooseTransactionType();

        // Create a custom NotifyDescriptor, specify the panel instance as a parameter + other params
        NotifyDescriptor nd = new NotifyDescriptor(
                popupSelector, // instance of your panel
                "Title", // title of the dialog
                NotifyDescriptor.YES_NO_OPTION, // it is Yes/No dialog ...
                NotifyDescriptor.QUESTION_MESSAGE, // ... of a question type => a question mark icon
                null, // we have specified YES_NO_OPTION => can be null, options specified by L&F,
                      // otherwise specify options as:
                      //     new Object[] { NotifyDescriptor.YES_OPTION, ... etc. },
                NotifyDescriptor.YES_OPTION // default option is "Yes"
        );

        // let's display the dialog now...
        if (DialogDisplayer.getDefault().notify(nd) == NotifyDescriptor.YES_OPTION) {
            // user clicked yes, do something here, for example:
                System.out.println(popupSelector.getTRANSACTION_TYPE());
        } 

person Deepak    schedule 24.04.2012    source источник


Ответы (1)


Чтобы заменить текст на кнопках 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
}
person Jonathan Spooner    schedule 25.04.2012
comment
отлично!! это то, что я искал .. спасибо за это !! - person Deepak; 25.04.2012