Java Swingで異なるルック・アンド・フィール(L&F)を設定する方法
Java Swingでは、ルック・アンド・フィール(Look and Feel:L&F)を変更することで、GUIの外観や操作感を自由にカスタマイズできます。「ルック」はコンポーネントの全体的な見た目を定義し、「フィール」はその動作(振る舞い)を定義します。
各L&FはLookAndFeelクラスのサブクラスとして実装されており、それぞれが完全修飾クラス名によって識別されます。デフォルトでは、Swing標準のL&FであるMetal L&Fが適用されます。
プログラムによるL&Fの設定方法
L&Fをプログラムから設定するには、UIManagerクラスのsetLookAndFeel()メソッドを呼び出します。重要なポイントとして、この呼び出しは任意のSwingクラスをインスタンス化する前に行う必要があります。インスタンス化後に呼び出すと、デフォルトのSwing L&Fが読み込まれてしまうためです。
構文
public static void setLookAndFeel(LookAndFeel newLookAndFeel) throws UnsupportedLookAndFeelException
また、実行中にL&Fを切り替えた場合は、SwingUtilities.updateComponentTreeUI()メソッドを呼び出して、既存のコンポーネントツリーに新しいL&Fを反映させる必要があります。
サンプルコード
以下は、ラジオボタンでWindows、Metal、Motifの3種類のL&Fを動的に切り替える例です。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class LookAndFeelTest extends JFrame implements ActionListener {
private JRadioButton windows, metal, motif;
private ButtonGroup bg;
public LookAndFeelTest() {
setTitle("Look And Feels");
windows = new JRadioButton("Windows");
windows.addActionListener(this);
metal = new JRadioButton("Metal");
metal.addActionListener(this);
motif = new JRadioButton("Motif");
motif.addActionListener(this);
bg = new ButtonGroup();
bg.add(windows);
bg.add(metal);
bg.add(motif);
setLayout(new FlowLayout());
add(windows);
add(metal);
add(motif);
setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent ae) {
String LAF;
if(ae.getSource() == windows)
LAF = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
else if(ae.getSource() == metal)
LAF = "javax.swing.plaf.metal.MetalLookAndFeel";
else
LAF = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";
try {
UIManager.setLookAndFeel(LAF);
SwingUtilities.updateComponentTreeUI(this);
} catch (Exception e) {
System.out.println("Error setting the LAF..." + e);
}
}
public static void main(String args[]) {
new LookAndFeelTest();
}
}実行結果
ラジオボタンを選択すると、ウィンドウ全体の外観が即座に選択したL&Fに切り替わります。
- Windows L&F: Windowsネイティブアプリのような外観になります(Windows環境でのみ利用可能)。
- Metal L&F: Java Swing独自のクロスプラットフォームな標準デザインです。
- Motif L&F: UNIX系で使われるMotifスタイルのクラシックな外観になります。
このように、UIManager.setLookAndFeel()メソッドとupdateComponentTreeUI()メソッドを組み合わせることで、アプリケーションを実行したまま外観と操作性を柔軟に変更できます。
-
JavaのLayoutManager(レイアウトマネージャー)とは?6つの種類と使い方を解説
LayoutManager(レイアウトマネージャー)は、GUIフォーム上に視覚コンポーネントをどのように配置するかを制御するための仕組みです。コンテナ内における各コンポーネントのサイズと位置を自動的に決定することで、ウィンドウサイズが変わっても整然としたユーザーインターフェースを維持できます。 LayoutManagerの種類 Javaには、標準で以下の6種類のレイアウトマネージャーが用意されています。 FlowLayout(フローレイアウト):コンポーネントをページ上の文章のように配置します。上段から左から右へ、上から下へと順に詰めていき、追加された順序どおりに並びます。最初のコンポーネン
-
Matplotlibでパッチのエッジ色とフェイス色に異なる不透明度を設定する方法
Matplotlibでパッチ(Patch)のエッジ色とフェイス色にそれぞれ異なる不透明度を設定したい場合は、RGBA形式のカラータプルを使用します。カラータプルの4番目の要素(アルファ値)に0~1の範囲の数値を指定することで、エッジとフェイスの不透明度を個別に制御できます。 手順 図のサイズを設定し、サブプロット間および周囲のパディングを調整します。 subplots()メソッドを使って、図とサブプロットを作成します。 エッジ色とフェイス色に、それぞれ異なる不透明度の値を設定します。 add_patch()メソッドを使って、長方形パッチを追加します。 show()メソッドで図を表示します。