【问题标题】:Colorize a tab in a JTabbedPane using java swing使用 java swing 为 JTabbedPane 中的选项卡着色
【发布时间】:2012-07-05 05:52:12
【问题描述】:

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

编辑 1:我正在使用 UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");,如果这可以帮助解决问题

编辑 2: 示例链接,https://www.dropbox.com/s/0krn9vikvkq46mz/JavaApplication4.rar

【问题讨论】:

  • 你要改哪个,tab还是tab的内容?
  • 我想改变标签,这个黑色部分必须是灰色的,就像 que 内容一样。安达我读了这个问题垃圾神,但没有任何帮助我,所以我自己创造了一个:)
  • 对不起,我不明白。我建议了两个选项below
  • 对不起,我想说,白色部分需要像图片底部的灰色一样灰色!

标签: java swing jtabbedpane


【解决方案1】:

您可以使用setBackgroundAt()更改标签的背景颜色,如图here

您可以使用setBackground() 更改选项卡内容的背景颜色,如here 所示。通常,您必须在选项卡的内容上执行此操作,因为封闭的 JTabbedPane 背景颜色会被内容遮盖。

如果您仍然遇到问题,请编辑您的问题以包含 sscce,基于任一示例显示您遇到的问题。

附录:组合方法也是可以的:

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

【讨论】:

  • 抱歉,我无法访问您的示例;我结合了上述两种方法。
  • 好吧,我会试试这个,如果不行我会找另一个地方放我的例子,谢谢
  • @evandrobm 你发布的是Win7或Vista,使用自定义外观
  • 我用的是win 7,我用的是 UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
  • 虽然它在本例中有效,但请注意最好在 EDT 上实例化 JTabbedPane,而不是在静态部分中。
【解决方案2】:
  • JTabbedPane 的大部分方法在 API 中受到保护,无法从 Swing 方法访问

  • 必须寻找Custom XxxTabbedPaneUI,覆盖这些方法,并且可以从外部访问

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

  • Custom XxxTabbedPaneUI 的示例

【讨论】:

  • 我避免这样做,因为它看起来更复杂,但我尝试并且工作得非常好,完美!你是个很好的人,我什至可以做更多的事情,非常感谢你!
【解决方案3】:

您应该考虑使用符合您要求的外观,或者如果失败,则更改 JTabbedPane 的默认 UIManger 设置:

UIManager.put("TabbedPane.background", Color.GRAY);

如果您选择后者,则必须在创建 GUI 之前完成。

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

编辑:我错了。应该是:

UIManager.put("TabbedPane.unselectedBackground", Color.GRAY);

但请注意,这可能不适用于所有外观。

【讨论】:

  • 我在设置外观和感觉后放了这行代码,但也没有任何变化......
  • 不行了,我用的是com.sun.java.swing.plaf.windows.WindowsLookAndFeel
【解决方案4】:

标签中还没有添加任何内容可能是个问题。

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

【讨论】:

  • 这个建议在哈迪斯没有机会奏效,抱歉。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-19
  • 1970-01-01
  • 1970-01-01
  • 2019-08-12
  • 1970-01-01
  • 2013-11-22
相关资源
最近更新 更多