2015-10-18 8 views
0

Предположим, у меня есть 2 JFrames. После того, как JFrame станет видимым, вы не можете изменить LAF, не устанавливая видимость на скрытый и обычный. Это означает мерцание, и JFrame прыгает к вершине.Как я могу создать определенный JFrame с другим JFrames из другого JFrames?

В противном случае, вы получите это:

(Some смесь между металлом и системой Ubuntu LAF)

Кроме того, перекраска, кажется, не поможет.

Теперь предположим, что первый JFrame был сделан с использованием Metal LAF. После того, как он отображается, LAF изменяется на систему LAF. Затем появляется вторая. Теперь на первое повлияло это смешное. Второй - ОК. Почему это так? Это код у меня есть:

public static void main(String[] args) throws ClassNotFoundException, UnsupportedLookAndFeelException, InstantiationException, IllegalAccessException { 
    JFrame first = new JFrame("First"); 
    first.add(new JButton("Click me, I look funny")); 
    first.setPreferredSize(new Dimension(100, 100)); 
    first.pack(); 
    first.setVisible(true); 

    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 

    first.repaint(); 

    JFrame second = new JFrame("Second"); 
    second.add(new JButton("Click")); 
    second.setPreferredSize(new Dimension(100, 100)); 
    second.pack(); 
    second.setVisible(true); 
    second.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 

Так как я могу сделать новый LAF влияет только на 1 JFrame?

Или глобальный LAF и не может применяться только к 1 JFrame?

+0

* "Скажем, у меня есть 2 JFrames." * См (HTTP [Использование нескольких JFrames, хороший/плохой практике?] : //stackoverflow.com/q/9554636/418556) –

ответ

1

Мне кажется, что они применяются при создании JFrames, поэтому просто измените настройку перед созданием следующего JFrame.

например:

UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel"); 
JFrame first = new JFrame("First"); 
first.add(new JButton("Click me, I look funny")); 
first.setPreferredSize(new Dimension(300, 100)); 
first.pack(); 
first.setVisible(true); 

UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel"); 

JFrame second = new JFrame("Second"); 
second.add(new JButton("Click")); 
second.setPreferredSize(new Dimension(100, 100)); 
second.setLocation(300, 0); 
second.pack(); 
second.setVisible(true); 
second.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

Произведено:

enter image description here