Как изменить фон кнопок внутри JOptionPane

Мне было интересно, знает ли кто-нибудь, можно ли изменить цвет фона на кнопках внутри JOptionPane. Я знаю, как изменить JOptionPane фон с помощью UIManager, но знаю, что хочу установить отдельные okButton, cancelButton и т. Д. Внутри JOptionPane для разделения отдельных цветов. Если я могу это сделать, как бы я это сделал?

Спасибо за помощь.


person Jacob Schmidt    schedule 04.05.2011    source источник
comment
@Blender: Я почти уверен, что речь идет о Java Swing, а не о html / css.   -  person Tikhon Jelvis    schedule 04.05.2011
comment
Почему? Как правило, менять настройки по умолчанию - не лучшая идея, согласованные визуальные эффекты присутствуют не просто так, их изменение может сбить с толку ваших пользователей.   -  person kleopatra    schedule 04.05.2011
comment
Вам не нужно использовать UIManager, потому что вы можете определить свой собственный JButton.   -  person Amir    schedule 06.04.2016


Ответы (4)


Прямого способа сделать это нет.

Но если вы действительно хотите попробовать, вам нужно будет прочитать JOptionPane API, который дает код, показывающий, как вручную создавать и отображать JOptionPane без использования методов showXXX.

Используя этот подход, теперь у вас есть доступ к актуальному JDialog. Затем вы можете использовать SwingUtils Даррила для доступа к отдельным кнопкам и затем установить фон.

Код будет примерно таким:

JButton ok = SwingUtils.getDescendantOfType(JButton.class, dialog, "Text", "Ok");
ok.setBackground(...);
person camickr    schedule 04.05.2011
comment
+1. Очень рад это слышать. Я искал это очень долго. Вы знаете что-нибудь о лицензии, по которой выпускаются SwingUtils? - person Heisenbug; 12.10.2011
comment
@Heisenbug, На странице «О программе» говорится, что вы можете использовать код по своему усмотрению. - person camickr; 12.10.2011

Самым простым было бы просто создать свой собственный JDialog и установить характеристики кнопки, которые вам нравятся.

person Hovercraft Full Of Eels    schedule 04.05.2011

Вы можете использовать свои собственные кнопки с вашими характеристиками в showOptionDialog. Думаю, это не лучшее решение, но оно просто работает.

JButton button = new JButton("OK");
button.setBackground(Color.BLACK);
button.setForeground(Color.WHITE);
button.addActionListener(new ActionListener() {
   @Override
   public void actionPerformed(ActionEvent actionEvent) {
       JOptionPane.getRootFrame().dispose();
   }
});
JButton[] buttons = { button };
OptionPane.showOptionDialog(null, "Test Message", "Dialog", JOptionPane.OK_OPTION, JOptionPane.INFORMATION_MESSAGE, new ImageIcon(), buttons, buttons[0]);

введите здесь описание изображения

person Amir    schedule 04.04.2016

Добавьте строку кода ниже перед JOptionPane

UIManager.put("Button.background", Color.white);
JOptionPane.showMessageDialog(null, "Project, Please");
person kupaff    schedule 01.02.2017