1

我在我的一个项目中使用 JTabbedPane,并且我正在尝试更改应用程序的外观和感觉。当我设置窗口的外观和感觉(以及与此相关的任何其他外观和感觉)时,所有按钮、检查按钮等都会更改为它们应该的样子,但选项卡仍然看起来像默认的摆动选项卡。这是它的外观示例:

在此处输入图像描述

按钮和复选框看起来像 windows 组件,但选项卡看起来像默认的 swing。如果有帮助,我将使用在单独的类文件中定义的 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 之前创建的。至少有两个修复。

  1. 将创建选项卡式窗格的行移动到 中main,并将其放在调用设置 PLAF 之后。
  2. 调用SwingUtilities.updateComponentTreeUI(topLevelContainer)嵌套布局示例中所示。该示例允许用户在运行时更改 PLAF。
于 2012-07-19T02:49:05.403 回答
0

有几个 UIManager 设置可用于管理 JTabbedPane 的外观。下面的链接提供了可用于自定义 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 回答