Dado o seguinte código:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.JMenuItem;
import javax.swing.JMenuBar;
import javax.swing.KeyStroke;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import javax.swing.JFrame;
import javax.swing.UIManager.*;
import javax.swing.plaf.metal.DefaultMetalTheme;
import javax.swing.plaf.metal.MetalLookAndFeel;
public class TesteLF implements ActionListener,ItemListener{
private JFrame frame = null;
//itens da Barra de Menus
JMenuBar menuBar;
JMenu menu;
JMenuItem menuItem;
JRadioButtonMenuItem[] rbMenuItem=new JRadioButtonMenuItem[3];
ButtonGroup group;
JTextArea saida;
JScrollPane scroll;
// Aparências(aspectos de Tela) possíveis
private static final String metal =
"javax.swing.plaf.metal.MetalLookAndFeel";
private static final String motif =
"com.sun.java.swing.plaf.motif.MotifLookAndFeel";
private static final String windows =
"com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
/*
*@method criaMenu()-método responsável pela criação da Barra de Menus
*/
public JMenuBar criaMenu(){
//Cria a barra de menu.
menuBar = new JMenuBar();
//Constrói o primeiro menu
menu = new JMenu("Aparência");//cabeçalho do primeiro menu
menu.setMnemonic(KeyEvent.VK_A);
menu.getAccessibleContext().setAccessibleDescription(
"Dados De Arquivo");
menuBar.add(menu);//adiciona o primeiro menu a barra de menus
group = new ButtonGroup();
rbMenuItem[0]= new JRadioButtonMenuItem("Java Look and Feel");
rbMenuItem[0].setSelected(true);
rbMenuItem[0].setMnemonic(KeyEvent.VK_B);
group.add(rbMenuItem[0]);
rbMenuItem[0].addActionListener(this);//ouvinte de evento para o radioButton
menu.add(rbMenuItem[0]);
rbMenuItem[1] = new JRadioButtonMenuItem("Motif Look and Feel");
rbMenuItem[1].setMnemonic(KeyEvent.VK_C);
group.add(rbMenuItem[1]);
rbMenuItem[1].addActionListener(this);
menu.add(rbMenuItem[1]);
rbMenuItem[2] = new JRadioButtonMenuItem("Windows Look and Feel");
rbMenuItem[2].setMnemonic(KeyEvent.VK_D);
group.add(rbMenuItem[2]);
rbMenuItem[2].addActionListener(this);
menu.add(rbMenuItem[2]);
return menuBar;
}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==rbMenuItem[0])
mudaAparencia(metal);
else if(e.getSource()==rbMenuItem[1])
mudaAparencia(motif);
else if(e.getSource()==rbMenuItem[2])
mudaAparencia(windows);
}
public void itemStateChanged(ItemEvent e) {
/*
if(rbMenuItem[0].isSelected()){
mudaAparencia(metal);
else if(rbMenuItem[1].isSelected())
mudaAparencia(motif);
else if(rbMenuItem[2].isSelected())
mudaAparencia(windows);
*/
}
/************Métodos para alterar o Look & Feel da Aplicação**********************/
/*
* @method mudaAparencia mudará a aparência da tela
*/
public void mudaAparencia(String aparencia){
try {
UIManager.setLookAndFeel(aparencia);
SwingUtilities.updateComponentTreeUI(frame);
}
catch (InstantiationException e) {
e.printStackTrace();
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
catch (UnsupportedLookAndFeelException e){
e.printStackTrace();
}
catch (IllegalAccessException e) {
e.printStackTrace();
}
// frame.repaint();
// frame.pack();
}//fim de mudaAparencia()
public Container criaContentPane() {
//Cria o panel
JPanel contentPane = new JPanel(new BorderLayout());
contentPane.setOpaque(true);
//Cria uma text area rolável.
saida = new JTextArea(5, 30);
saida.setEditable(false);
scroll = new JScrollPane(saida);
//Adicona a textarea content pane.
contentPane.add(scroll, BorderLayout.CENTER);
return contentPane;
}
private void exibeTela(){
//Decora a janela.
JFrame.setDefaultLookAndFeelDecorated(true);
//Cria e seta a janela.
frame = new JFrame("Teste de Look&Feel Dinâmico");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Cria uma instancia de classe e seta o content pane.
TesteLF tlf=new TesteLF();
frame.setJMenuBar(tlf.criaMenu());
frame.setContentPane(tlf.criaContentPane());
//mostra a janela.
frame.setSize(450, 260);
frame.setVisible(true);
//centraliza o frame na tela
frame.setLocationRelativeTo(null);
}//fim de exibeTela()
public static void main(String[] args) {
final TesteLF tlf=new TesteLF();//cria uma instância da Classe
//Agenda um trabalho para o event-dispatching thread:
//cria e mostra a aplicação GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
tlf.exibeTela();
}
});
}//fim do main()
}//fim da classe TesteLF
O L&F não se altera de modo algum!Dá uns erros de thread dispatch!
Alguém sabe pq isso acontece? :?
