非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

Java Swing のLook&FeelをWIndows風にする方法

   

Java Swingのデフォルトの見た目ってあまりきれいではありません。MetalっていうUIらしいのですが、これが嫌でJavaから遠のく人もいるみたいです。僕も最初はウゲッ!って思いましたもん。

でも、Javaには見た目をWindows風にすることができるんです。Javaの初心者本こそまずはここを紹介すべきだと思うんですよね。

[ad#top-1]

SwingのデフォルトのLook&Feel

Swingのデフォルトの見た目がこちら。たしかにメタルっぽい。

 

久々にJavaを使ってみたのですが、以前に比べてフォントはきれいになりましたね。以前の(Java1.2くらいの)デフォルトのフォントってホントに汚かったですもん(笑)。

 

Windows風にするとこうなります

Swingには見た目を変える機能があります。Windows風にすると以下のように、いつものWindowsソフトの外観になります。

 

ちなみに、昔のUnix(X Window)風にすることもできます。Motifといいますが、見た目も悪いし使い勝手も悪いので、あまりお薦めできません(笑)。

 

どうやってLook&Feelを変えるのか

JavaにはUIManagerというクラスがあって、その中にsetLookAndFeelというメソッドがあります。こいつで見た目を変えることができるわけです。

基本構文はこちら

UIManager.setLookAndFeel(“com.sun.java.swing.plaf.windows.WindowsLookAndFeel”);

 

実際に使うときは、例外処理しなければなりません。

全体のソースコードは以下の通りとなります。LookAndFeelChangeメソッドにまとめて引数で切り替えられるようにしております。”windows”を引数にするとWindowsアプリのような外観になります。

import java.awt.*;
import javax.swing.*;

public class Test extends JFrame{
  protected Container pane;

  public static void main(String[] args){
    Test f = new Test("Test");
    f.setLocationRelativeTo(null);
    f.setVisible(true);
  }

  Test(String t){
    super(t);
    setSize(400, 300);
    pane = getContentPane();
    pane.setLayout(new FlowLayout());

    LookAndFeelChange("windows");

    JTextField text = new JTextField(25);
    pane.add(text);

    JButton btn = new JButton("Submit");
    pane.add(btn);

    String[] list = {"ComboboxData1", "ComboboxData2", "ComboboxData3", "ComboboxData4"};
    JComboBox cmb = new JComboBox(list);
    pane.add(cmb);
  }

  private void LookAndFeelChange(String look){
    try{
      if(look.equals("windows")){
        UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
      }else if(look.equals("motif")){
        UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
      }else{
        UIManager.setLookAndFeel("com.sun.java.swing.plaf.metal.MetalLookAndFeel");
      }
    }catch(UnsupportedLookAndFeelException e){
    }catch(ClassNotFoundException e){
    }catch(InstantiationException e){
    }catch(IllegalAccessException e){
    }
  }
}
 

 

.

[ad#ad-1]

スポンサーリンク

 - Java