How to change the look and feel of Swing applications
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
public class Main extends JFrame {
private String strings[] = { "Metal", "Motif", "Windows" };
private UIManager.LookAndFeelInfo looks[] = UIManager.getInstalledLookAndFeels();
private JRadioButton radio[] = new JRadioButton[strings.length];
private JButton button = new JButton("JButton");
private JLabel label= new JLabel("This is a Metal look-and-feel", SwingConstants.CENTER);
private JComboBox comboBox = new JComboBox(strings);
public Main() {
JPanel northPanel = new JPanel();
northPanel.setLayout(new GridLayout(3, 1, 0, 5));
northPanel.add(label);
northPanel.add(button);
northPanel.add(comboBox);
add(northPanel, BorderLayout.NORTH);
JPanel southPanel = new JPanel();
ItemHandler handler = new ItemHandler();
southPanel.setLayout(new GridLayout(1, radio.length));
ButtonGroup group = new ButtonGroup();
for (int i = 0; i < radio.length; i++) {
radio[i] = new JRadioButton(strings[i]);
radio[i].addItemListener(handler);
group.add(radio[i]);
southPanel.add(radio[i]);
}
add(southPanel, BorderLayout.SOUTH);
setSize(300, 200);
setVisible(true);
radio[0].setSelected(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private void changeTheLookAndFeel(int value) {
try {
UIManager.setLookAndFeel(looks[value].getClassName());
SwingUtilities.updateComponentTreeUI(this);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String args[]) {
Main dx = new Main();
}
private class ItemHandler implements ItemListener {
public void itemStateChanged(ItemEvent e) {
for (int i = 0; i < radio.length; i++)
if (radio[i].isSelected()) {
label.setText("This is a " + strings[i] + " look-and-feel");
comboBox.setSelectedIndex(i);
changeTheLookAndFeel(i);
}
}
}
}
Related examples in the same category