我一直在努力解决这个问题。
我试图在JTabbedPane中出现淡蓝色背景。我已经尝试了一切,似乎没有任何工作。
以下是我的代码。如果您运行它,它将显示选项卡,当选择浅蓝色背景和顶部的东西蓝色边框。我想控制这种颜色。但是如何?
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.plaf.ColorUIResource;
public class Main extends JFrame {
JTabbedPane tab=new JTabbedPane();
public Main() {
setSize(300,300);
setTitle("Test Tab pane");
tab.add("First",new myPanel("First"));
tab.add("Second",new myPanel("Second"));
tab.add("Third",new myPanel("Third"));
tab.add("Fourth",new myPanel("Fourth"));
tab.addChangeListener(new ChangeTab());
getContentPane().add(tab,BorderLayout.CENTER);
setVisible(true);
for(int i=0;i<tab.getTabCount();i++){
if(i != tab.getSelectedIndex())
tab.setBackgroundAt(i,Color.orange);
tab.setForeground(Color.BLACK);
}
tab.setOpaque(true);
UIManager.put("TabbedPane.contentAreaColor ",ColorUIResource.GREEN);
UIManager.put("TabbedPane.selected",ColorUIResource.GREEN);
UIManager.put("TabbedPane.background",ColorUIResource.GREEN);
UIManager.put("TabbedPane.shadow",ColorUIResource.GREEN);
}
public static void main(String[] args) {
Main main = new Main();
}
class ChangeTab implements ChangeListener{
public void stateChanged(ChangeEvent e){
tab.validate();
System.out.println(tab.getSelectedIndex());
for(int i=0;i<tab.getTabCount();i++){
if(i != tab.getSelectedIndex())
tab.setBackgroundAt(i,Color.orange);
}
}
}
class myPanel extends JPanel{
public myPanel(String str){
add(new JLabel(str));
}
}
}
答案 0 :(得分:9)
我使用了你的示例代码,对我来说有用的是将UIManager.put()
的调用移动到执行JTabbedPane构造函数之前执行它们的位置。
public class Main extends JFrame {
JTabbedPane tab;
public Main() {
// ... other stuff
UIManager.put("TabbedPane.contentAreaColor ",ColorUIResource.GREEN);
UIManager.put("TabbedPane.selected",ColorUIResource.GREEN);
UIManager.put("TabbedPane.background",ColorUIResource.GREEN);
UIManager.put("TabbedPane.shadow",ColorUIResource.GREEN);
// now construct the tabbed pane
tab=new JTabbedPane();
// ... other stuff
}
还有一些其他属性可用(至少对于Metal L&amp; F):
UIManager.put("TabbedPane.borderColor", Color.RED);
UIManager.put("TabbedPane.darkShadow", ColorUIResource.RED);
UIManager.put("TabbedPane.light", ColorUIResource.RED);
UIManager.put("TabbedPane.highlight", ColorUIResource.RED);
UIManager.put("TabbedPane.focus", ColorUIResource.RED);
UIManager.put("TabbedPane.unselectedBackground", ColorUIResource.RED);
UIManager.put("TabbedPane.selectHighlight", ColorUIResource.RED);
UIManager.put("TabbedPane.tabAreaBackground", ColorUIResource.RED);
UIManager.put("TabbedPane.borderHightlightColor", ColorUIResource.RED);
这些可让您控制标签区域中的大部分颜色。
我发现在这些设置下,内容周围仍然有一个非常小的蓝色灰色边框。我搜索了如何设置这种颜色无济于事。我能找到解决这个问题的唯一解决方案是:
UIManager.put("TabbedPane.contentBorderInsets", new Insets(0, 0, 0, 0));
这是次优解决方案。
答案 1 :(得分:2)
使用这些值检查结果。
UIManager.put("TabbedPane.contentAreaColor", Color.GREEN);
UIManager.put("TabbedPane.light", ColorUIResource.GREEN);
UIManager.put("TabbedPane.highlight", ColorUIResource.GREEN);
UIManager.put("TabbedPane.shadow", ColorUIResource.GREEN);
UIManager.put("TabbedPane.darkShadow", ColorUIResource.GREEN);
UIManager.put("TabbedPane.selected", ColorUIResource.GREEN);
UIManager.put("TabbedPane.borderHightlightColor", ColorUIResource.GREEN);
正如您所看到的,唯一的方法是,在面板顶部获得所需颜色的暗边框,将“borderHightlightColor”设置为所需的颜色。不幸的是,这有副作用(所有标签周围的绿色边框)。而且,来自背景的绿色线之间存在这条灰线。
我认为唯一真正的解决方案是覆盖你的MetalTabbedPaneUI。如果只设置contentAreaColor并为方法执行空覆盖
paintContentBorderTopEdge(g, tabPlacement, selectedIndex, x, y, w, h);
paintContentBorderLeftEdge(g, tabPlacement, selectedIndex, x, y, w, h);
paintContentBorderBottomEdge(g, tabPlacement, selectedIndex, x, y, w, h);
paintContentBorderRightEdge(g, tabPlacement, selectedIndex, x, y, w, h);
结果应该接近我怀疑你想得到的结果。
答案 2 :(得分:0)
尝试2: 我修复了我的边框问题,改变了外观和感觉经理。这仍然不是你想要的......
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.plaf.ColorUIResource;
public class Main extends JFrame {
JTabbedPane tab=new JTabbedPane();
public Main() {
setBackground(Color.white);
setSize(300,300);
setTitle("Test Tab pane");
tab.add("First",new myPanel("First"));
tab.add("Second",new myPanel("Second"));
tab.add("Third",new myPanel("Third"));
tab.add("Fourth",new myPanel("Fourth"));
tab.addChangeListener(new ChangeTab());
tab.setBackground(Color.white);
tab.setForeground(Color.black);
tab.setBorder(BorderFactory.createEmptyBorder());
getContentPane().add(tab,BorderLayout.CENTER);
setVisible(true);
}
public static void main (String[] args) throws Exception {
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
Main main = new Main();
}
class ChangeTab implements ChangeListener{
public void stateChanged(ChangeEvent e){
tab.validate();
System.out.println(tab.getSelectedIndex());
}
}
class myPanel extends JPanel{
public myPanel(String str){
setBackground(Color.white);
setBorder(BorderFactory.createEmptyBorder());
add(new JLabel(str));
}
}
}