【问题标题】:Java look and feel JTabbedPaneJava 外观和感觉 JTabbedPane
【发布时间】:2012-07-18 04:04:50
【问题描述】:

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

【问题讨论】:

  • 是否还有其他明确设置选项卡的外观和感觉的东西? JTabbedPane 显示的是什么 UI 类?
  • TabComponentsDemo 中工作。请编辑您的问题,在sscce 中包含您描述的问题。
  • 感谢在@JeffStorey 中编辑图片的人——这是默认的摇摆外观
  • 据我所知,没有其他东西可以设置 l&f。
  • UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel"); 主题?!?想要那种 1980 年代的“复古”感觉?糟糕!

标签: java swing look-and-feel jtabbedpane


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    有几个 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);    
    }
    

    }

    【讨论】:

    • 当我这样做时,据我所知没有任何变化。标签看起来仍然像默认的摇摆标签。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多