Изменить размер текста параметров JOptionPane.showInputDialog - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь изменить размер шрифта возможностей, которые я предоставил в следующем коде:

    font = new Font("Arial", Font.PLAIN, 20);

    UIManager.put("OptionPane.messageFont", font);
    UIManager.put("OptionPane.buttonFont", font);

    Object[] possibilities = {"100%", "80%", "20%"};
    selected = (String)JOptionPane.showInputDialog(
                        frame,
                        "Select the accuracy level.",
                        "Accuracy",
                        JOptionPane.PLAIN_MESSAGE,
                        null, possibilities,
                        "100%");

Как видите, я знаю, как изменить шрифт сообщения и шрифт кнопки,Я просто не могу изменить шрифт самих опций.

1 Ответ

0 голосов
/ 28 февраля 2019

Помните, что изменение свойств компонента через 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");
}

В конечном итоге, при обнаружении этого кода в пользовательском диалоге ввода будет отображаться что-то вроде этого:

enter image description here

Если кнопка OK выбрана без какого-либо выбора, в окне консоли отобразится Accuracy Selected Is: 100%.С другой стороны, если выбрана кнопка Отмена или Кнопка закрытия строки заголовка [x] , то в окне консоли отображается Input Canceled!.

Если в поле со списком в диалоговом окне выбрано 20% и выбрана кнопка OK , то в окне консоли отобразится Accuracy Selected Is: 20%.

enter image description here

В другой заметке , если вы хотите добавить пользовательское изображение в свой диалог, как показано ниже:

enter image description here

Затем добавьте эту строку в начало кода:

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.

...