我正在尝试更改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
答案 0 :(得分:17)
您可以使用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);
}
}
}
答案 1 :(得分:5)
JTabbedPane
的大多数方法在API中受到保护,而无法从Swing方法访问
必须查找Custom XxxTabbedPaneUI
,覆盖这些方法,并且可以从外部访问
正确的方法是仅实施Custom Look & Feel,其中一部分覆盖JTabbedPane
答案 2 :(得分:3)
你应该考虑使用一个能够做到你想要的外观或者失败的外观,改变JTabbedPane的默认UIManger设置:
UIManager.put("TabbedPane.background", Color.GRAY);
如果您选择后者,则必须在创建GUI之前完成。
有关详情,请参阅Rob Camick关于此主题的优秀博客:UIManager Defaults。
编辑:我错了。它应该是:UIManager.put("TabbedPane.unselectedBackground", Color.GRAY);
但请注意,这可能不适合每一个外观。
答案 3 :(得分:-3)
可能存在一个问题,即标签中没有添加任何内容。
尝试将内容面板的内容管理器设置为BorderLayout
,并添加JPanel
BorderLayout
。居中,然后为该面板着色。