我正在使用Nimbus外观和感觉。我需要在JTabbedPane中更改选项卡的背景颜色和前景色,但是在JTabbedPane中没有设置颜色。我尝试了setForeground(),setForegroundAt(),setBackground()和setBackgroundAt()方法,但它不起作用。这是我的代码
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();
}
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();
}
答案 0 :(得分:9)
您可以做一些不同的事情,具体取决于您对确切颜色的控制程度。最简单的方法是更改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类。
答案 1 :(得分:3)
我讨厌把它分给你,但是你会很难改变前景和背景颜色。与许多基本组件(JTextField,JLabel等)不同,JTabbedPane在设置绘制时忽略前景色和背景色。相反,它允许UI委托(由当前外观和感觉确定)选择颜色。
一些外观和感觉允许颜色主题(Substance浮现在脑海中),但是Nimbus似乎将这些颜色值硬编码到油漆代表中。
您很可能需要基于Nimbus实现自己的UI委托。有关详细信息,请参阅here。 这将是一个重大的痛苦,所以问问自己你想要改变这些颜色的程度。
最后,如果有人告诉您只是将JTabbedPane子类化并在您自己的“paintComponent”方法中设置颜色,请忽略它。然后,您将负责整个组件的绘制,并将失去任何类似Nimbus的视觉属性。
答案 2 :(得分:2)
JTabbedPane在向其添加组件时起作用,例如添加5个JPanel,它们将被标记。
答案 3 :(得分:2)
抱歉我的英文。
我试过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 !!它的工作!
答案 4 :(得分:1)
如果要更改实际内容,选项卡式窗格有两种有用的方法: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);
}
后一种方法更灵活 - 您可以稍后使用此类代码对所有组件执行更复杂的操作。
答案 5 :(得分:1)
其实不是真的
new JTabbedPane().setUI(new YourUI());
然后创建简单的用户界面
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());
}
}
....
}
Jan Cajthaml
它应该是这样的(不要介意QuadSpline选项卡和关闭吧,这是我的UI实现的另一个附加组件),我的声誉在这里是没有所以有一个链接到图像
http://a5.sphotos.ak.fbcdn.net/hphotos-ak-ash3/166028_2974620064454_896181702_n.jpg