繁体   English   中英

Java外观JTabbedPane

[英]Java look and feel JTabbedPane

我在我的项目中使用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);    
    }
}

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

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

您可以使用几个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);    
}

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM