如何在选择时更改标签的颜色?和它的边界?在这种情况下,它的Arbitros
标签是蓝色的,我该如何更改?我在JTabbedPane
内使用JFrame
我发现了这个但是它无效UIManager.put("TabbedPane.selected", Color.white);
我做错了什么?
public VentanaPrincipal_vista() {
super("Ventana Principal");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(1000, 500);
this.setResizable(false);
this.setUndecorated(true);
this.setBackground(Color.BLUE);
// add tabbedPane and tabs .
tabs = new JTabbedPane();
tabs.setBackground(new Color(83, 83, 83));
tabs.setForeground(new Color(255, 255, 255));
tabs.setBorder(null);
UIManager.put("TabbedPane.selected", Color.white);
this.add(tabs);
menuBar = new BGMenuBar();
menuBar.setColor(new Color(83, 83, 83));
this.setJMenuBar(menuBar);
menu = new JMenu("File");
menu.setForeground(Color.white);
menuBar.add(menu);
close = new JMenuItem("Close");
menu.add(close);
close.addActionListener(this);
close.setBackground(new Color(83, 83, 83));
close.setForeground(new Color(255, 255, 255));
op1 = new JMenuItem("option 1");
op1.setBackground(new Color(83, 83, 83));
op1.setForeground(new Color(255, 255, 255));
menu.add(op1);
this.setLocationRelativeTo(null);
this.setVisible(true);
}// end of constructor
答案 0 :(得分:6)
对我来说,下面的解决方案有效,我只是在创建JTabbedPane对象之前设置了UImanager的TabbedPane.selected颜色属性。
UIManager.put("TabbedPane.selected", Color.red);
tabbedPane = new JTabbedPane();
请参阅此链接,我相信它也适合您。
http://esus.com/changing-the-color-of-the-selected-tab-of-a-jtabbedpane/
答案 1 :(得分:0)
对CodeyX1答案的评论: 对我来说,uimanager未选择状态与这些值一起使用(中间没有“Tab”字样):
UIManager.put("TabbedPane.unselectedForeground", Color.xxx)
UIManager.put("TabbedPane.selectedBackground", Color.xxx)
答案 2 :(得分:-1)
请从java docs中检查以下方法以获取JTabbedPane
http://docs.oracle.com/javase/tutorial/uiswing/components/tabbedpane.html#eg
void setBackgroundAt(int,Color)
答案 3 :(得分:-1)
试试这个:
import java.awt.*;
import javax.swing.*;
import javax.swing.plaf.basic.BasicTabbedPaneUI;
public class TabHighlight extends JPanel
{
private static final int MAX = 5;
private JTabbedPane pane = new JTabbedPane();
public TabHighlight()
{
for (int i = 0; i < MAX; i++)
{
Color color = Color.black; //Set default tab background to black
pane.add("Tab " + String.valueOf(i), new TabContent(pane, i, color));
pane.setBackgroundAt(i, color);
pane.setForegroundAt(i, Color.white);
}
this.add(pane);
}
private static class TabContent extends JPanel
{
private TabContent(JTabbedPane panel, int i, Color color)
{
//Active and inactive tab coloring must be done
//when rendering the CONTENT of the JTabbedPane object
//Override these default settings to allow for active and inactive
//tab background color changing
panel.setUI(new BasicTabbedPaneUI()
{
@Override
protected void installDefaults()
{
super.installDefaults();
highlight = Color.lightGray;
lightHighlight = Color.white;
shadow = Color.gray;
darkShadow = Color.darkGray;
//Active tab background is white
//so set the focus color to white
//to hide the active tab focus
//marker seeing that we want the
//active tab backgound to be different
focus = Color.black;
}
});
//Set the active tab background to white
UIManager.put("TabbedPane.selected", Color.gray);
UIManager.put("TabbedPane.unselectedTabBackground", Color.black);
//Remove borders
UIManager.put("TabbedPane.contentBorderInsets", new Insets(0, 0, 0, 0));
setOpaque(true);
setBackground(color);
setForeground(Color.white);
add(new JLabel("Tab content " + String.valueOf(i)));
}
@Override
public Dimension getPreferredSize()
{
return new Dimension(320, 240);
}
}
public void display()
{
JFrame f = new JFrame("TabHighlight");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(this);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
//Use this function here to change the look and feel to Java's default
//If using a mac with OS X Yosemite or another recent Mac OS X release
public static void initLookAndFeel()
{
try
{
UIManager.setLookAndFeel(
UIManager.getCrossPlatformLookAndFeelClassName()
);
}
catch(UnsupportedLookAndFeelException e)
{
}
catch(ClassNotFoundException e)
{
}
catch(InstantiationException e)
{
}
catch(IllegalAccessException e)
{
}
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
@Override
public void run()
{
initLookAndFeel();
new TabHighlight().display();
}
});
}
}
让我们来看看这段代码,它会在程序启动时添加5个标签:
public TabHighlight()
{
for (int i = 0; i < MAX; i++)
{
Color color = Color.black; //Set default tab background to black
Color color2 = Color.white; //Set default tab foreground to white
pane.add("Tab " + String.valueOf(i), new TabContent(pane, i, color));
pane.setBackgroundAt(i, color);
pane.setForegroundAt(i, Color.white);
}
this.add(pane);
}
您要求帮助实施计划的第一个区域是&#34; for&#34;块。我将尝试以您将理解的方式解释这一点。
前两行定义每个非活动选项卡的默认背景和前景色。您可以将这些更改为您喜欢的颜色。
第三行添加一个包含以下属性的选项卡:
第四行应用默认背景颜色
最后一行应用默认前景色。注意:UIManager
无法更改这些属性。我尝试了一些替代方法,但没有成功。 Darn,我希望有一种更简单的方法来实现这一点。
现在让我们仔细看看定义活动和非活动标签外观的代码片段:
private TabContent(JTabbedPane panel, int i, Color color)
{
//Active and inactive tab coloring must be done
//when rendering the CONTENT of the JTabbedPane object
//Override these default settings to allow for active and inactive
//tab background color changing
panel.setUI(new BasicTabbedPaneUI()
{
@Override
protected void installDefaults()
{
super.installDefaults();
highlight = Color.lightGray;
lightHighlight = Color.white;
shadow = Color.gray;
darkShadow = Color.darkGray;
//Active tab background is white
//so set the focus color to white
//to hide the active tab focus
//marker seeing that we want the
//active tab backgound to be different
focus = Color.black;
}
});
//Set the active tab background to white
UIManager.put("TabbedPane.selected", Color.gray);
//Set the inactive tab background to black
UIManager.put("TabbedPane.unselectedTabBackground", Color.black);
//Remove borders
UIManager.put("TabbedPane.contentBorderInsets"
, new Insets(0, 0, 0, 0));
setOpaque(true);
setBackground(color);
setForeground(Color.white);
add(new JLabel("Tab content " + String.valueOf(i)));
}
在此部分代码中,执行以下操作:
使用下面的代码块覆盖UI
panel.setUI(new BasicTabbedPaneUI()
{
//place the code from step 2 here
}
输入该部分的以下属性:
highlight = Color.lightGray;
lightHighlight = Color.white;
shadow = Color.gray;
darkShadow = Color.darkGray;
focus = Color.black;
就像在第一个代码段中一样,您也可以更改这些属性。这是一点点 提示:每个标签在标签标签周围都有一个小点框,这标志着焦点。如果 如果要隐藏此标记,只需将其颜色设置为与活动标签的颜色相匹配, 现在有了重点。
使用UIManager
更改以下属性:
UIManager.put("TabbedPane.selected", Color.gray);
UIManager.put("TabbedPane.unselectedTabBackground", Color.black);
这将允许您在程序期间更改活动的和非活动标签背景 运行时。
您使用UIManager
这是实现您尝试的最佳方式
去做。在这里使用这段代码可以让您进行所需的更改
对于,但您可以在执行任何这些更改之前执行第2步
影响。 UIManager.put("TabbedPane.selectedForeground", Color.xxx)
和
UIManager.put("TabbedPane.unselectedTabForeground", Color.xxx)
不要改变
前景色,前景色保持不变。
UIManager.put("TabbedPane.selected", Color.xxx)
将更改背景颜色
活动标签和UIManager.put("TabbedPane.unselectedTabBackground")
将会
更改无效标签的背景颜色。
将这两段代码复制并粘贴到您的文件中,然后根据需要进行更改。
我建议您将整个源代码复制到顶部并将其粘贴到编译器中,然后再运行它。通过这种方式,您可以看到此程序的功能,当您返回到正在使用的原始代码时,您将知道将这些代码段放在何处。
希望这有帮助。
如果您遇到此问题,请在回复中发布SSCCE,以便查看您遇到问题的位置。
感谢。