Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java swing为JTabbedPane中的选项卡着色_Java_Swing_Jtabbedpane - Fatal编程技术网

使用java swing为JTabbedPane中的选项卡着色

使用java swing为JTabbedPane中的选项卡着色,java,swing,jtabbedpane,Java,Swing,Jtabbedpane,我正在尝试更改JTabbedPane中选项卡的背景色。我尝试了JTabbedPane.setBackgroudAt(0,Color.GRAY)和JTabbedPane.setBackgroud(Color.GRAY)以及前景,但什么也没发生。我更改了选项卡内面板的背景,仍然没有任何更改 编辑1:我正在使用UIManager.setLookAndFeel(“com.sun.java.swing.plaf.windows.windowslokandfeel”)如果这有助于解决方案 编辑2:链接到一

我正在尝试更改
JTabbedPane
中选项卡的背景色。我尝试了
JTabbedPane.setBackgroudAt(0,Color.GRAY)
JTabbedPane.setBackgroud(Color.GRAY)
以及前景,但什么也没发生。我更改了选项卡内面板的背景,仍然没有任何更改

编辑1:我正在使用
UIManager.setLookAndFeel(“com.sun.java.swing.plaf.windows.windowslokandfeel”)如果这有助于解决方案


编辑2:链接到一个示例,

可能是因为该选项卡中没有添加任何内容


尝试将内容面板的内容管理器设置为
BorderLayout
,使用
BorderLayout
添加
JPanel
。中心,然后着色该面板。

你应该考虑使用你所希望的,或者失败的外观,改变JTabBeane:u/P>的默认UimanRead设置:

UIManager.put("TabbedPane.background", Color.GRAY);
如果选择后者,则必须在创建GUI之前完成

有关这方面的更多信息,请参阅Rob Camick关于以下主题的优秀博客:

编辑:我错了。应该是:

UIManager.put("TabbedPane.unselectedBackground", Color.GRAY);
但请注意,这可能不适用于所有外观。

  • JTabbedPane
    的大多数方法在API中受保护,不能从Swing方法访问

  • 必须查找
    自定义XxxTabbedPaneUI
    ,覆盖这些方法,并且可以从外部访问

  • 正确的方法是只实现,其中一部分覆盖
    JTabbedPane

  • 举例


您可以使用
setBackgroundAt()
更改选项卡的背景色,如图所示


您可以使用
setBackground()
更改选项卡内容的背景色,如图所示。通常,您必须在选项卡的内容上执行此操作,因为内容会模糊包围的
JTabbedPane
背景色

如果您仍然有问题,请编辑您的问题,使其包含基于显示您所回答问题的任何一个示例的问题

附录:也可以结合这些方法:

import java.awt.*;
import java.awt.event.*;
import java.util.Random;
import javax.swing.*;

public class JTabbedTest {

    private static JTabbedPane jtp;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame f = new JFrame();
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                jtp = new JTabbedPane();
                jtp.setPreferredSize(new Dimension(320, 200));
                jtp.addTab("Reds", new ColorPanel(0, Color.RED));
                jtp.setBackgroundAt(0, Color.RED);
                jtp.addTab("Greens", new ColorPanel(1, Color.GREEN));
                jtp.setBackgroundAt(1, Color.GREEN);
                jtp.addTab("Blues", new ColorPanel(2, Color.BLUE));
                jtp.setBackgroundAt(2, Color.BLUE);

                f.add(jtp, BorderLayout.CENTER);
                f.pack();
                f.setVisible(true);
            }
        });
    }

    private static class ColorPanel extends JPanel implements ActionListener {

        private final Random rnd = new Random();
        private final Timer timer = new Timer(1000, this);
        private Color color;
        private Color original;
        private int mask;
        private JLabel label = new JLabel("Stackoverflow!");
        private int index;

        public ColorPanel(int index, Color color) {
            super(true);
            this.color = color;
            this.original = color;
            this.mask = color.getRGB();
            this.index = index;
            this.setBackground(color);
            label.setForeground(color);
            this.add(label);
            timer.start();
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            color = new Color(rnd.nextInt() & mask);
            this.setBackground(color);
            jtp.setBackgroundAt(index, original);
        }
    }
}


您想更改的选项卡或选项卡内容可能重复?我想更改选项卡,此黑色部分必须是灰色的,就像内容一样。我读了这篇题为《垃圾神》的文章,但没有任何帮助,所以我自己做了一篇:)对不起,我不明白。我建议了两个选项。对不起,我想说的是,白色部分需要像图片底部的灰色一样是灰色的!抱歉,这个建议在地狱里不可能起作用。我在设置了外观之后才放了这行代码,但也没有任何变化……不再起作用,我正在使用com.sun.java.swing.plaf.windows.windowslook和feelsorry,我无法访问你的示例;我结合了以上两种方法。好吧,我会试试这个,如果不奏效,我会找另一个地方举我的例子,thanks@evandrobm您使用的是Win7或Vista,使用的是自定义外观我使用的是Win7,我使用的是UIManager.setLookAndFeel(“com.sun.java.swing.plaf.windows.WindowsLookAndFeel”);虽然它在这个例子中起作用,但请注意,在EDT上实例化JTabbedPane的做法更好,而不是在静态部分。我之所以避免这种做法,是因为它看起来更复杂,但我尝试了,效果非常好,完美!你是一个很好的人,我甚至可以做更多的事情,非常非常感谢你的人!