2014-09-03 3 views
0

У меня есть серия 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); 
      } 
     }); 
    } 
} 

ответ

3

.

UIManager.setLookAndFeel(lnfName); 
SwingUtilities.updateComponentTreeUI(frame); 
frame.pack(); 
  • в вашем случае следует использовать локальную переменную для JButton (вместо JFrame) тоже (срок действия части JComponents с помощью MetalLookAndFeel, WindowsLookAndFeel)

  • for example

+0

Hi mKorbel благодарит за отзыв. Поскольку все компоненты (независимо от внешнего вида или ощущения) добавляются в кадр перед его отображением, обновление дерева компонентов, похоже, не влияет; вместо этого я ожидал бы метод по строкам 'UIManager.setLookAndFeelDefaults (...)', хотя я не могу найти его. – Hungry

+0

@ 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

+0

Я немного смущен, это связано с моим ответ на romeo? Если да, то предлагаете ли вы, чтобы я написал свой собственный класс кнопок, чтобы иметь заполненный цвет фона? – Hungry

0

Я не думаю, что PLAF предназначен для того, чтобы назначать разные взгляды и ощущать различные компоненты качания.

По какой причине вы не используете следующее?

button2.setBackground(bg); 
+0

Привет, Ромео, к сожалению, я должен изменить внешний вид и внешний вид, поскольку установка цвета фона JButton с использованием внешнего вида окна изменяет внешний вид ее границы, а не кнопку целиком. – Hungry

+0

Хорошо, извините, к счастью, у вас были лучшие ответы, чем у меня;) –

 Смежные вопросы

  • Нет связанных вопросов^_^