Metalテーマの操作
ルックアンドフィールの中でも、特別な働きを持っているのが「Metal」です。これは、Javaのルックアンドフィールとして新たに作成された、Java独自のものです。いわば「Javaの基本ルックアンドフィール」ですから、他のルックアンドフィールにはない機能も盛り込まれています。――では、先ほどのクラスを修正して、Metalのルックアンドフィールを変更するサンプルを作ってみましょう。
package jp.allabout;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.plaf.metal.*;
public class SampleApp extends JFrame implements ActionListener {
private HashMapthemes;
public SampleApp(){
try {
UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
SwingUtilities.updateComponentTreeUI(this);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (UnsupportedLookAndFeelException e) {
e.printStackTrace();
}
themes = new HashMap();
themes.put("steel",(MetalTheme)(new DefaultMetalTheme()));
themes.put("ocean",(MetalTheme)(new OceanTheme()));
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();
Iteratoriterator = themes.keySet().iterator();
while(iterator.hasNext()){
String name = (String)iterator.next();
JRadioButton radio = new JRadioButton(name);
group.add(radio);
radio.setActionCommand(name);
radio.addActionListener(this);
panel.add(radio);
}
return panel;
}
public static void main(String[] args) {
new SampleApp().setVisible(true);
}
@Override
public void actionPerformed(ActionEvent ex) {
JRadioButton radio = (JRadioButton)ex.getSource();
String theme = radio.getActionCommand();
System.out.println(theme);
MetalLookAndFeel.setCurrentTheme(themes.get(theme));
try {
UIManager.setLookAndFeel(new MetalLookAndFeel());
SwingUtilities.updateComponentTreeUI(this);
} catch (UnsupportedLookAndFeelException e) {
e.printStackTrace();
}
}
}
Metalのテーマを「steel」「ocean」で切り替える。 |