设置JTabbedPane的背景颜色
我使用的是Nimbus外观。我需要更改JTabbedPane中选项卡的背景颜色和前景颜色,但颜色不会在JTabbedPane中设置。我试图setForeground(),setForegroundAt()的setBackground()和setBackgroundAt()方法,但它不是works.This是我的代码设置JTabbedPane的背景颜色
public class TabbedPaneDemo extends JFrame
{
TabbedPaneDemo()
{
try
{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
}
catch(Exception ex) {}
setLayout(new BorderLayout()); setBounds(100, 100, 800, 500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JTabbedPane jt = new JTabbedPane(); jt.addTab("Tab1", new JPanel()); jt.addTab("Tab2", new JPanel()); jt.addTab("Tab3", new JPanel()); jt.addTab("Tab4", new JPanel()); for(int i = 0; i < jt.getComponentCount(); i++) { jt.setForegroundAt(i, Color.RED); jt.setBackgroundAt(i, Color.BLACK); } add(jt); setVisible(true); } public static void main(String args[]) { new TabbedPaneDemo(); }
}
您可以做几件不同的事情,具体取决于您想要的准确颜色的控制程度。最简单的方法是更改UIManager中的某些属性,以更改Nimbus从其中获取其他颜色的颜色。我打得四处一点与您的代码,并发现,如果我把下面的代码中调用UIManager.setLookAndFeel()后,它会接近你在你的例子试图红色的黑色的外观:
UIManager.put("nimbusBase", new ColorUIResource(0, 0, 0));
UIManager.put("textForeground", new ColorUIResource(255, 0, 0));
我会让你试验。欲了解更多信息,请阅读关于配置Nimbus here的好文章。一定要看看他的标题为“Nimbus UIDefaults Properties List”的链接。除了将颜色按摩到与您想要的类似的东西之外,您必须开始做一些混乱的事情,比如实施自定义绘画的Painter类。
JTabbedPane的工作,当你将组件添加到它,例如添加5个JPanels,它们将被标记。
如果要更改实际内容,则选项卡式窗格有两种有用的方法:setForegroundAt
和setBackgroundAt
。您可以通过所有的标签,只是循环调用这些:
for (int i = 0; i < pane.getTabCount(); i++) {
pane.setForegroundAt(i, foregroundColor);
pane.setBackgroundAt(i, backgroundColor);
}
您还可以使用getComponentAt
,类似地:
for (int i = 0; i < pane.getTabCount(); i++) {
pane.getComponentAt(i).setForeground(foregroundColor);
pane.getComponentAt(i).setBackground(backgroundColor);
}
后一种方法更灵活 - 您可以稍后做更复杂所有组件使用这样的代码。
我讨厌将它分解给你,但你将很难得到改变前景和背景的颜色。与许多基本组件(JTextField,JLabel等)不同,JTabbedPane在设置绘画时会忽略前景和背景颜色。相反,它允许UI委托(由当前的外观和感觉决定)来选择颜色。
一些外观和感觉允许颜色主题(想到Substance),但Nimbus似乎将这些颜色值硬编码到绘画代表中。
很可能你需要基于Nimbus的实现你自己的UI委托。有关更多信息,请参阅here。 这将是一个主要的痛苦,所以问问自己多少你想要这些颜色改变。
最后,如果有人告诉你简单地继承JTabbedPane的子类并在你自己的“paintComponent”方法中设置颜色,那就忽略它。然后,您将负责绘制整个组件,并且将失去任何类似Nimbus的视觉属性。
我第二个Jason - 我花了好几天的时间试图让Nimbus中的JTabbedPane显示Tabs更深一点(因为当您指定灯光基色时,它们几乎变白)。非常令人沮丧的是,你需要在Nimbus内部获得学位...... – Philippp 2011-09-21 03:33:21
对不起,我的英语。
我试着解决这个问题2天..有“解决”解决方案。
需要设置选项卡组件。然后为此组件设置颜色。
/*
...
Setting LAF Nimbus
...
*/
JTabbedPane tp = new JTabbedPane();
/*
...
add tabs in TabbedPane
...
*/
然后指定标签需要做的:
JLabel title = new JLabel(tp.getTitleAt(tabIndex));
title.setForeground(Color.RED);
tp.setTabComponentAt(tabIndex, title);
OMG!是工作!
+1不错的一个 - 但请注意,它不适用于背景颜色。 – DNA 2012-03-27 11:06:51
其实不是真正的
new JTabbedPane().setUI(new YourUI());
,然后您创建简单的UI
public class YourUI extends BasicTabbedPaneUI{
.....
private class ScrollableTabPanel extends JPanel implements UIResource {
public ScrollableTabPanel() {
setLayout(null);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.red);
g.fillRect(tabPane.getBounds());
}
}
....
}
月Cajthaml
有是应该的样子(不介意QuadSpline标签并关闭酒吧这是我的UI实现的另一个附加组件),我在这里的声望是没有的,所以有一个链接到图像
http://a5.sphotos.ak.fbcdn.net/hphotos-ak-ash3/166028_2974620064454_896181702_n.jpg
我已将面板添加到JTabbedPane。这是我的代码 JTabbedPane jt = new JTabbedPane(); jt.addTab(“Tab1”,new JPanel()); jt.addTab(“Tab2”,new JPanel()); jt.addTab(“Tab3”,new JPanel()); jt.addTab(“Tab4”,new JPanel()); jt.setForeground(Color.RED); jt.setBackground(Color.BLACK); jf.add(jt); //将JTabbedPane添加到JFrame – Ram 2010-03-15 07:22:17