Java外观JTabbedPane

时间:2012-07-19 01:58:33

标签: java swing look-and-feel jtabbedpane

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

enter image description here

按钮和复选框看起来像窗口组件,但标签看起来像默认的摆动。如果它有帮助,我正在使用在单独的类文件中定义的JTabbedPane的子类。我的问题是如何让JTabbedPane中的标签看起来像窗口标签?

此代码为我模拟了问题。选项卡显示为swing,但按钮显示为不同的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);    
    }
}

2 个答案:

答案 0 :(得分:3)

在设置PLAF之前创建JTabbedPane。至少有两个修复程序。

  1. 将创建选项卡式窗格的行移动到main,并在调用之后将其放置以设置PLAF。
  2. Nested Layout Example所示调用SwingUtilities.updateComponentTreeUI(topLevelContainer)。该示例允许用户在运行时更改PLAF。

答案 1 :(得分:0)

您可以使用几种UIManager设置来管理JTabbedPane的外观。下面的链接提供了可用于自定义JTabbedPane外观的所有属性。

Customizing JTabbedPane look and feel

例如,您可以使用自定义颜色:

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);    
}

}