我在我的项目中使用JTabbedPane,我正在尝试更改应用程序的外观。当我设置窗口的外观和感觉(以及任何其他外观和感觉)时,所有按钮,检查按钮等都会改变为它们的外观,但选项卡仍然看起来像默认的摆动选项卡。以下是它的外观示例:
按钮和复选框看起来像窗口组件,但标签看起来像默认的摆动。如果它有帮助,我正在使用在单独的类文件中定义的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);
}
}
答案 0 :(得分:3)
在设置PLAF之前创建JTabbedPane
。至少有两个修复程序。
main
,并在调用之后将其放置以设置PLAF。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);
}
}