1

私のプロジェクトで JTabbedPane を使用しており、アプリケーションのルック アンド フィールを変更しようとしています。ウィンドウのルック アンド フィール (およびその他のルック アンド フィール) を設定すると、すべてのボタン、チェック ボタンなどの外観が変更されますが、タブはデフォルトのスイング タブのように見えます。これがどのように見えるかの例です:

ここに画像の説明を入力

ボタンとチェックボックスは Windows コンポーネントのように見えますが、タブはデフォルトのスイングのように見えます。それが役立つ場合は、別のクラス ファイルで定義されている JTabbedPane のサブクラスを使用しています。私の質問は、JTabbedPane のタブを Windows タブのように見せるにはどうすればよいですか?

このコードは私のために問題をエミュレートします。タブはスイングとして表示されますが、ボタンは別の l&f として表示されます。

import javax.swing.*;
import java.awt.*;
public class TabbedFrame
{
    private static JFrame window;
    private static JPanel pane;
    private static JTabbedPane tabs = new JTabbedPane();
    public static void main(String[] vars) 
    {
        try
        {
                UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
        } catch (Exception ee){
            ee.printStackTrace();
        }
        window = new JFrame("tabs");
        pane = new JPanel();
        window.setSize(200, 300);
        window.setLocation(100, 100);
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setContentPane(pane);    
        Panel[] panes;
        panes = new Panel[2];
        panes[0] = new Panel();
        panes[1] = new Panel();
        panes[0].add(new Label("PANEL 1..................."));
        panes[1].add(new Label("PANEL 2 ....."));   
        tabs.addTab("tab 1", panes[0]);
        tabs.addTab("tab 2", panes[1]);
        tabs.setSize(480, 640);
        pane.add(tabs);
        pane.add(new JButton("test"));
        pane.add(new JCheckBox());
        pane.add(new JRadioButton());
        tabs.setBounds(20, 20, 200, 200);
        window.setVisible(true);    
    }
}
4

2 に答える 2

4

JTabbedPane、PLAF が設定される前に作成されます。少なくとも 2 つの修正があります。

  1. タブ付きペインを作成する行を に移動しmain、PLAF を設定する呼び出しの後に配置します。
  2. Nested Layout ExampleSwingUtilities.updateComponentTreeUI(topLevelContainer)に示すように呼び出します。この例では、ユーザーが実行時に PLAF を変更できます。
于 2012-07-19T02:49:05.403 に答える
0

JTabbedPane のルック アンド フィールを管理するために使用できる UIManager 設定がいくつかあります。以下のリンクは、JTabbedPane のルック アンド フィールをカスタマイズするために使用できるすべてのプロパティを提供します。

JTabbedPane のルック アンド フィールのカスタマイズ

たとえば、次のように色をカスタマイズするために使用できます。

UIManager.put("TabbedPane.selected", Color.RED);

JTabbedPane は投稿されたコードで既にインスタンス化されているため、UIManager の設定は変更されていません。

import javax.swing.*;
import java.awt.*;
public class TabbedFrame
{
private static JFrame window;
private static JPanel pane;
private static JTabbedPane tabs;
public static void main(String[] vars) 
{
    try
    {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
            UIManager.put("TabbedPane.selected",Color.GREEN);

    } catch (Exception ee){
        ee.printStackTrace();
    }
    window = new JFrame("tabs");
    pane = new JPanel();
    tabs = new JTabbedPane();
    window.setSize(200, 300);
    window.setLocation(100, 100);
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.setContentPane(pane);    
    Panel[] panes;
    panes = new Panel[2];
    panes[0] = new Panel();
    panes[1] = new Panel();
    panes[0].add(new Label("PANEL 1..................."));
    panes[1].add(new Label("PANEL 2 ....."));   
    tabs.addTab("tab 1", panes[0]);
    tabs.addTab("tab 2", panes[1]);
    tabs.setSize(480, 640);
    pane.add(tabs);
    pane.add(new JButton("test"));
    pane.add(new JCheckBox());
    pane.add(new JRadioButton());
    tabs.setBounds(20, 20, 200, 200);
    window.setVisible(true);    
}

}

于 2012-07-19T02:14:16.913 に答える