У меня есть серия JComponents после внешнего вида, поэтому я хочу временно установить новый внешний вид и добавить новые компоненты, прежде чем возвращать их обратно в оригинал. В приведенном ниже коде показан пример трех JButtons, в которых внешний вид «Button 1» и «Button 3» должен быть идентичным, при этом «Button 2» отличается. Приведенный код возвращает общий внешний вид, однако lookandfeeldefaults
, которые установлены вручную (то есть шрифт шрифта), теряются. Приветствия.Временное изменение внешнего вида по умолчанию в Java Swing
EDIT: Извините, вопрос немного вводит в заблуждение: происходят все изменения внешнего вида до отображается панель, как показано в примере кода. Этот вопрос отличается от предлагаемого дубликата, поскольку проблема заключается в повторной загрузке вручную установленных (UIManager.getLookAndFeelDefaults().put(...)
) объектов, в отличие от общего внешнего вида. Основная причина этого вопроса в том, что мне нужно добавить JButton с заполненным цветом фона на панель, а setBackground
устанавливает только границу JButton при использовании windows look and feel
, тогда как заполняет фон.
UPDATE: Решение должно использовать UIManager.getLookAndFeelDefaults().putAll(previousLF);
вместо setLookAndFeel. Соответственно, код был обновлен.
import java.awt.Color;
import java.awt.Font;
import javax.swing.*;
import javax.swing.UIManager.LookAndFeelInfo;
public class test {
public static void main(String[] args){
SwingUtilities.invokeLater(new Runnable(){
public void run() {
//Set initial look and feel.
try{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
UIManager.getLookAndFeelDefaults().put("Button.font", new Font("Arial", Font.PLAIN, 20));
} catch (Exception e){}
JButton button1 = new JButton("1");
//change look and feel for button two.
UIDefaults previousLF = UIManager.getLookAndFeelDefaults();
try {
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
UIManager.getLookAndFeelDefaults().put("Button.background", Color.BLUE);
} catch (Exception e) {}
JButton button2 = new JButton("2");
//Revert look and feel.
try {
UIManager.getLookAndFeelDefaults().putAll(previousLF);
} catch (Exception e) {}
JButton button3 = new JButton("3");
//Add buttons to panel and display for testing purposes.
JPanel testPanel = new JPanel();
testPanel.add(button1);
testPanel.add(button2);
testPanel.add(button3);
JOptionPane.showMessageDialog(null, testPanel);
}
});
}
}
Hi mKorbel благодарит за отзыв. Поскольку все компоненты (независимо от внешнего вида или ощущения) добавляются в кадр перед его отображением, обновление дерева компонентов, похоже, не влияет; вместо этого я ожидал бы метод по строкам 'UIManager.setLookAndFeelDefaults (...)', хотя я не могу найти его. – Hungry
@ btrs20 JButton имеет [массивы цветов] (http://stackoverflow.com/questions/5751311/creating-a-custom-button-in-java-with-jbutton/5755124#5755124), например. [Список цветов из JButton] (http://stackoverflow.com/a/5845007/714968), определенный в javax.swing.plaf.ColorUIRsource для ключа Button.background как цвет – mKorbel
Я немного смущен, это связано с моим ответ на romeo? Если да, то предлагаете ли вы, чтобы я написал свой собственный класс кнопок, чтобы иметь заполненный цвет фона? – Hungry