Помните, что изменение свойств компонента через UIManager также повлияет на все будущие JOptionPanes, которые будут использовать эти измененные свойства.Лучше всего просто иметь дело с JOptionPane, просто создав пользовательскую панель для диалога.
В приведенном ниже примере кода мы используем настраиваемое диалоговое окно подтверждения, чтобы действовать в качестве поля ввода.Вот как вы можете это сделать:
// Your desired Accuracy choices for dialog combox.
Object[] possibilities = {"20%", "80%", "100%"};
//The panel to display within the Dialog
JPanel jp = new JPanel();
jp.setLayout(new BorderLayout()); // Panel layout manager
// JLabel to hold the dialog text. HTML is used to add pizzaz. :)
JLabel jl = new JLabel(
"<html>Select the desired <font color=blue><b>Accuracy Level</font>:"
+ "</b><br><br></html>");
// Desired font, style, and size for Message
Font font = new Font("Arial", Font.PLAIN, 14);
jl.setFont(font); // Set the font to JLabel (the msg)
jp.add(jl, BorderLayout.NORTH); // Add JLabel to top of Dialog
// JComboBox to hold all the available Accuracy choices.
JComboBox jc = new JComboBox(possibilities);
jc.setSelectedIndex(2); // Set 100% as default in Combo
// Desired font, style, and size for combo items
font = new Font("Arial", Font.PLAIN, 20);
jc.setFont(font); // Set the font to combo
jp.add(jc, BorderLayout.SOUTH); // Add JComboBox to Bottom section of Dialog
String valueSelected; // Variable to hold the combo selected value.
/* Display the custom Input Box Dialog which is actually a
customized Confirm Dialog Box with the above JPanel supplied
as the message content. Also, if the OK button was selected
then fill the valueSelected string variable declared above
with the Combo selection. 100% has been set as default.*/
if (JOptionPane.showConfirmDialog(this, jp, "Accuracy",
JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE) == 0) {
valueSelected = jc.getSelectedItem().toString();
System.out.println("Accuracy Selected Is: " + valueSelected);
}
else {
System.out.println("Input Canceled");
}
В конечном итоге, при обнаружении этого кода в пользовательском диалоге ввода будет отображаться что-то вроде этого:
Если кнопка OK выбрана без какого-либо выбора, в окне консоли отобразится Accuracy Selected Is: 100%
.С другой стороны, если выбрана кнопка Отмена или Кнопка закрытия строки заголовка [x] , то в окне консоли отображается Input Canceled!
.
Если в поле со списком в диалоговом окне выбрано 20% и выбрана кнопка OK , то в окне консоли отобразится Accuracy Selected Is: 20%
.
В другой заметке , если вы хотите добавить пользовательское изображение в свой диалог, как показано ниже:
Затем добавьте эту строку в начало кода:
final ImageIcon icon = new ImageIcon("AccuracyIcon.png");
, затем измените строку вызова на диалоговое окно на это:
if (JOptionPane.showConfirmDialog(this, jp, "Accuracy",
JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, icon) == 0) {
valueSelected = jc.getSelectedItem().toString();
System.out.println("Accuracy Selected Is: " + valueSelected);
}
else {
System.out.println("Input Canceled");
}
Конечно, вам нужно будет указать правильный путь и имя файла для изображения, которое вы хотите использовать.Если вы хотите использовать изображение в примере, тогда вы можете получить его здесь (не забудьте соответственно изменить его размер - 72x76).
Вы можете легко увидеть, насколько гибким это может быть, выполнивэто так и ... это не повлияет на другие будущие JOPtionPanes.