【问题标题】:How to change background color of JTabbedPane in runtime?如何在运行时更改 JTabbedPane 的背景颜色?
【发布时间】:2012-10-26 11:14:33
【问题描述】:

我发现了大量使用setBackgroundAt()UIManager.put("JTabbedPane...") 更改JTabbedPane 背景颜色的示例

但是,我想在一个复选框上创建一个onclick 事件,当您选择它时将背景颜色更改为绿色,并在您取消选择它时恢复默认颜色。

我无法使用上述方法完成这项工作。

有什么想法吗?

PS:我可以使用setForgroundAt() 更改前景色,但由于某种原因不能更改背景

【问题讨论】:

  • 工作,确保 UIManager 有更多的 JTabeedPane 键,而不是 CustomWhatever 的好 JComponent,因为大多数方法都受到外部保护(也实现了方法),为了更好的帮助,请尽快发布 SSCCE,跨度>
  • 我想知道为什么不实现我自己的 tabbedpane 版本的情况下可以更改前景色,但不能更改背景
  • 不知道怎么回事,发个SSCCE
  • 一般情况下,当可以设置前景,不能设置背景时,需要勾选opaque属性。如果它是假的,那么背景没有被绘制,你看到的是父母的背景。

标签: java swing look-and-feel jtabbedpane uimanager


【解决方案1】:

LAF 可以随意忽略一些(仅可视?不知道)JComponent 属性的自定义设置,as documentedf.i.:

尊重此属性取决于外观和感觉,有些人可能会选择忽略它。

因此结果高度依赖于 LAF(Metal 和 Motif 中的 Workforme,而不是 Nimbus/Win)没有简单安全的方法(除了调整 ui 委托,这不是一个真正的选择)

【讨论】:

  • 所有JComponent都一样。
  • @trashgod 感谢提醒,过度关注这个特定的上下文 ;-)
  • 所以我猜基本上放弃了。我想我只能改变前景色并在不改变外观的情况下使用它
【解决方案2】:

覆盖paintComponent 并更改那里的颜色。

@Override
public void paintComponent(Graphics g) {
    g.setColor(new Color(color));
    g.fillRect(0, 0, getWidth(), getHeight());

【讨论】:

  • 我认为这不适用于以我想要的方式在运行时更改背景颜色。这只会改变一次。我需要使用 actionlistener 更改两次
  • @Shervin 只需将这些方法调用包装在 if 语句中,其中条件检查复选框的值。在您的动作监听器中,只需在 JTabbedPane 上调用 repaint()
  • @Shervin 绝对是您在动作中的某处更改颜色,正如@GuillaumePolet 所说,调用repaint 以使更改生效。
【解决方案3】:

在设置每个标签面板的背景/前景色后尝试以下操作。这应该使顶部的选项卡与 JTabbedPane (myTabs) 中的面板颜色相同。这适用于 Nimbus。

for (int c = 0; c < myTabs.getComponentCount(); ++c)
{
  myTabs.setBackgroundAt(c, myTabs.getComponentAt(c).getBackground());
  myTabs.setForegroundAt(c, myTabs.getComponentAt(c).getForeground());
}

myTabs.setOpaque(true);
myTabs.setUI(new BasicTabbedPaneUI()); 

【讨论】:

    猜你喜欢
    • 2012-02-03
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    相关资源
    最近更新 更多