トップ 新規 編集 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

Swingの基本:GUI部品のLookAndFeel

 GUI部品のLookAndFeel

  • Javaは多くのプラットフォーム上で同一のプログラムを動作させることが可能なため、各プラットフォームに応じた、あるいは独自のインターフェース(この場合、GUI部品の外観)を用意している。それらのインターフェースのことをLook&Feelといい必要に応じて設定できるようになっている。

 LookAndFeelを扱った例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package sample.swing;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.UIManager.LookAndFeelInfo;

@SuppressWarnings("serial")
public class LookAndFeelSample extends JFrame {
    LookAndFeelInfo[] lfInfos;
    JButton[] lfButtons;
    public LookAndFeelSample() {
        super("LookAndFeelサンプル");
        lfInfos = UIManager.getInstalledLookAndFeels();
        lfButtons = new JButton[lfInfos.length];
        JPanel buttonPanel = new JPanel();
        for (int i = 0; i < lfInfos.length; i++) {
            lfButtons[i] = new JButton(lfInfos[i].getName());
            lfButtons[i].addActionListener(new ActionListener(){
                @Override
                public void actionPerformed(ActionEvent e) {
                    changeLookAndFeel(((JButton)e.getSource()).getText());
                }
            });
            buttonPanel.add(lfButtons[i]);
        }
        add(buttonPanel,BorderLayout.SOUTH);
        //ダミーメニュー
        JMenuBar menuBar = new JMenuBar();
        //ファイルメニュー
        JMenu fileMenu = new JMenu("ファイル");
        JMenuItem newFile = new JMenuItem("新規");
        fileMenu.add(newFile);
        JMenuItem overWriteFile = new JMenuItem("上書き保存");
        fileMenu.add(overWriteFile);
        fileMenu.addSeparator();
        JMenuItem exit = new JMenuItem("終了");
        fileMenu.add(exit);
        menuBar.add(fileMenu);
        //編集メニュー
        JMenu editMenu = new JMenu("編集(E)");
        editMenu.setMnemonic('E');
        JMenuItem cutItem = new JMenuItem("カット");
        editMenu.add(cutItem);
        JMenuItem pasteItem = new JMenuItem("ペースト");
        editMenu.add(pasteItem);
        menuBar.add(editMenu);
        //ヘルプメニュー
        JMenu helpMenu = new JMenu("ヘルプ(H)");
        helpMenu.setMnemonic('H');
        JMenuItem versionMenuItem = new JMenuItem("バージョン情報(A)");
        helpMenu.add(versionMenuItem);
        menuBar.add(helpMenu);
        add(menuBar,BorderLayout.NORTH);
        //ダミーラジオボタン
        JPanel radioPanel = new JPanel();
        radioPanel.add(new JRadioButton("ダミーA"));
        radioPanel.add(new JRadioButton("ダミーB"));
        radioPanel.add(new JRadioButton("ダミーC"));
        add(radioPanel,BorderLayout.CENTER);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // ×を押したときに終了するように
        pack();
        setVisible(true);
    }
    private void changeLookAndFeel(String str) {
        String lfClassName = UIManager.getLookAndFeel().getClass().getName();
        for(LookAndFeelInfo info:lfInfos) {
            if(info.getName().equals(str)) {
                lfClassName = info.getClassName();
                break;
            }
        }
        try {
            UIManager.setLookAndFeel(lfClassName);
            SwingUtilities.updateComponentTreeUI(this);
            pack();
        } catch (ClassNotFoundException e1) {
            e1.printStackTrace();
        } catch (InstantiationException e1) {
            e1.printStackTrace();
        } catch (IllegalAccessException e1) {
            e1.printStackTrace();
        } catch (UnsupportedLookAndFeelException e1) {
            e1.printStackTrace();
        }
    }
    public static void main(String[] args) {
        new LookAndFeelSample();
    }
}
LookAndFeelSample.java

最終更新時間:2008年07月09日 23時51分20秒