Java 如何删除在JTabbedPane中选择选项卡时出现的蓝色边框突出显示?
这是我的一个延续,但它解决了一个可能对其他人有用的具体问题,所以我想我会把它作为一个单独的问题发布 我已成功创建了一个JTabbedPane,但有一个蓝色边框突出显示,显示我要删除的选项卡: 为了澄清我的意思,这里有一张没有Eclipse蓝色边框突出显示的JTabbedPane图片: 我尝试过的事情已经被评论掉了:Java 如何删除在JTabbedPane中选择选项卡时出现的蓝色边框突出显示?,java,swing,osx-mountain-lion,look-and-feel,jtabbedpane,Java,Swing,Osx Mountain Lion,Look And Feel,Jtabbedpane,这是我的一个延续,但它解决了一个可能对其他人有用的具体问题,所以我想我会把它作为一个单独的问题发布 我已成功创建了一个JTabbedPane,但有一个蓝色边框突出显示,显示我要删除的选项卡: 为了澄清我的意思,这里有一张没有Eclipse蓝色边框突出显示的JTabbedPane图片: 我尝试过的事情已经被评论掉了: public class SeaGlassExercise { public static void initWindow() { JFrame fra
public class SeaGlassExercise {
public static void initWindow() {
JFrame frame = new JFrame("Application Name");
CustomTabbedPane content = new CustomTabbedPane();
frame.setContentPane(content);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setLocationByPlatform(true);
// try {
// UIManager.setLookAndFeel(
// UIManager.getSystemLookAndFeelClassName());
// } catch (Exception e) {
// e.printStackTrace();
// }
// SwingUtilities.updateComponentTreeUI(frame);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
initWindow();
}
});
}
}
class CustomTabbedPane extends JPanel {
public CustomTabbedPane() {
super(new GridLayout(1, 1));
// 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);
// UIManager.put("TabbedPane.borderHightlightColor", ColorUIResource.GREEN);
// UIManager.put("TabbedPane.contentBorderInsets", new Insets(0, 0, 0, 0));
JTabbedPane tabbedPane = new JTabbedPane();
JComponent panel1 = makeTextPanel("Panel #1");
tabbedPane.addTab("AAA", panel1);
JComponent panel2 = makeTextPanel("Panel #2");
tabbedPane.addTab("BBB", panel2);
JComponent panel3 = makeTextPanel("Panel #3");
tabbedPane.addTab("CCC", panel3);
JComponent panel4 = makeTextPanel("Panel #4");
tabbedPane.addTab("DDD", panel4);
add(tabbedPane);
tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
}
protected JComponent makeTextPanel(String text) {
JPanel panel = new JPanel();
JLabel filler = new JLabel(text);
filler.setHorizontalAlignment(JLabel.CENTER);
panel.setLayout(new GridLayout(1, 1));
panel.add(filler);
return panel;
}
}
补充资料
我目前正在使用OS X Mountain Lion和java版本“1.7.0_25”、java(TM)SE运行时环境(build 1.7.0_25-b15)运行我的程序。我使用的是默认的外观(即,我没有在代码中使用.setUI()指定任何内容)
以下是我已经研究过的一些问题:
我知道移除选项卡边框的正确视觉解决方案:
tabbedPane.setFocusable(false);
但是您无法使用选项卡式窗格的键。请注意,当前的方法可能不适用于其他平台/外观。如果您当前的项目只打算在Mac上工作,而您不打算在将来更改它,那么在这种情况下它可能会工作。但通常情况下,Java应用程序旨在跨不同的平台和外观工作 说到这里,您可能想看看这篇关于最流行的外观和感觉默认值的有趣文章:。查看这些表时,您会发现并非所有L&f都支持相同的属性,并且在创建UI对象时可能会忽略它们(f.i.
TabbedPaneUI
)
如果你喜欢Mac L&F(我喜欢),那么我建议你尝试定制一款与Mac非常相似的产品。这样,您将获得以下好处:
- 标准的跨平台L&F与您的应用程序附带的Mac L&F类似
- 自定义L&F,此更改也将跨平台进行
- 统一用户体验(非小事)。也许你和我可以在Mac OS、Windows或Linux上使用不同L&F的同一个应用程序。但许多用户做不到:当GUI看起来不同时,他们会迷路
for(Object key : UIManager.getLookAndFeel().getDefaults().keySet()) {
System.out.println(key + " = " + UIManager.get(key));
}
这些都是相当多,我真的没有足够的时间给你一个工作的例子,所以我希望这个想法是好的,足以帮助你
注
如果您不希望框架和对话框具有Seaglass提供的默认装饰(这对我来说非常难看),那么您需要执行以下操作:
UIManager.setLookAndFeel(new SeaGlassLookAndFeel());
JFrame.setDefaultLookAndFeelDecorated(false);
JDialog.setDefaultLookAndFeelDecorated(false);
这样,框架和对话框的窗口装饰将由当前的窗口管理器(直至操作系统)提供。我相信设置边框将删除这些。。。它在JTextField上执行 例如:
JTextField field = new JTextField();
field.setBorder(new EmptyBorder(3, 3, 3, 3));
这将删除蓝色焦点边框。与其中一个链接问题中的解决方案类似,您可以通过执行
UIManager.put(“TabbedPane.focus”,新颜色(0,true))获得所需结果代码>,它不会删除边框,但应该使其完全透明。是的,它应该像所有其他UIManager.put()调用一样工作,但它不会。唯一能产生效果的是UIManager.put(“TabbedPane.background”,Color.GREEN)
com.apple.laf.AquaTabbedPaneUI
忽略此属性。+1我想它确实会阻止某人使用密钥,但确实有效。