ルックアンドフィールを変えよう!
Swingの大きな特徴の一つに「自由なルックアンドフィール」というものがあります。ルックアンドフィールとは、GUIの「見た目」のデザイン。例えば、WindowsとMac OSでは、ボタンやメニューのデザインが違っていますね。これが、ルックアンドフィールです。
Swingでは、このルックアンドフィールを、独立した形で提供し、それを設定できるようになっています。では、実際にどのようなルックアンドフィールが用意されているのか、どのようにしてルックアンドフィールを変更すればよいのか、サンプルプログラムを作って説明していきましょう。
package jp.allabout;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class SampleApp extends JFrame implements ActionListener {
public SampleApp(){
this.setSize(new Dimension(200,200));
JButton button = new JButton("click");
this.add(button,BorderLayout.SOUTH);
JCheckBox check = new JCheckBox("dummy check box",true);
this.add(check,BorderLayout.NORTH);
this.add(this.getRadioPanel(),BorderLayout.CENTER);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private JPanel getRadioPanel(){
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel,BoxLayout.Y_AXIS));
ButtonGroup group = new ButtonGroup();
UIManager.LookAndFeelInfo[] arr = UIManager.getInstalledLookAndFeels();
for(UIManager.LookAndFeelInfo info:arr){
JRadioButton radio = new JRadioButton(info.getName());
group.add(radio);
radio.setActionCommand(info.getClassName());
radio.addActionListener(this);
panel.add(radio);
}
group.setSelected(group.getElements().nextElement().getModel(), true);
return panel;
}
public static void main(String[] args) {
new SampleApp().setVisible(true);
}
@Override
public void actionPerformed(ActionEvent ex) {
JRadioButton radio = (JRadioButton)ex.getSource();
String laf = radio.getActionCommand();
System.out.println(laf);
try {
UIManager.setLookAndFeel(laf);
SwingUtilities.updateComponentTreeUI(this);
} catch (ClassNotFoundException ex2) {
ex2.printStackTrace();
} catch (InstantiationException ex2) {
ex2.printStackTrace();
} catch (IllegalAccessException ex2) {
ex2.printStackTrace();
} catch (UnsupportedLookAndFeelException ex2) {
ex2.printStackTrace();
}
}
}
これは、ルックアンドフィールを切り替える簡単なサンプルです。用意されているルックアンドフィールがラジオボタンとして表示されます。このラジオボタンをクリックして切り替えると、その場でウインドウの表示が変わります。なお、その他にチェックボックスとプッシュボタンがありますが、これらはルックアンドフィールの違いを確認しやすくするために用意したダミーです。何も機能はありません。