【问题标题】:Swing component default gradient backgroundSwing 组件默认渐变背景
【发布时间】:2012-03-09 14:36:30
【问题描述】:

有没有办法将 Swing 组件(例如 JPanel)的所有实例的默认背景绘制更改为使用渐变背景绘制?或者我是否需要创建一个使用渐变绘制的 JPanel 扩展,然后在我的应用程序中的任何地方使用它而不是 JPanel?

【问题讨论】:

  • 您不是只需要对后台 JPanel 进行此操作,然后让所有其他 JPanel 不透明吗?
  • @HovercraftFullOfEels,这也是另一种选择。如果我想将它扩展到其他组件,我想我仍然需要扩展这些组件。
  • @JeffStorey:也许,但不一定。您可以通过一些将 opaque 设置为 false 的简单工厂方法创建您的 JPanel,或者您可以通过 GUI 将所有非基础 JPanel 设置为不透明来递归。
  • 对,对于 JPanels(这实际上是我目前的做法),但假设我想将渐变应用到 JButton。我必须为按钮做同样的事情。我希望有一种方法可以将渐变背景应用到组件 X,但我不确定是否有。
  • 您可能可以通过创建自己的外观和感觉来做到这一点。不过我自己从来没有这样做过。

标签: java swing gradient look-and-feel


【解决方案1】:

恕我直言,将 Swing 组件子类化并覆盖其paintComponent 方法来进行渐变绘制会更容易。然后,如您所说,在整个应用程序中使用此自定义组件。

使用 UI 属性可能会很棘手,因为它们在所有 LaF 中可能不一致。

【讨论】:

  • 这是我最初的想法。不确定是否有更简单的方法。特别是如果我想将渐变应用于多种组件类型,我需要对所有组件进行子类化。
  • @JeffStorey,在这种情况下,子类化JComponent 可能会更好。
  • 我不确定这对多种组件类型有何帮助。假设我正在更改按钮的背景,那么子类化 JComponent 有什么帮助?
【解决方案2】:

目前尚不完全清楚您想要的范围。您是指 class (因此所有 JPanel 实例都遵循新的绘制方案),还是指容器中的 所有 组件(例如 Frame 中的所有内容)?

根据组件类,可以挂钩的位置是外观和感觉,以及在组件实例基础上,paintComponent() 方法,或者如果您需要替换标准,有可能做到这一点通过在创建组件后提供自己的 UI 类(查看 Component.setUI)来查看现有组件,您无法覆盖该方法,因为您无法控制它。

除了覆盖 paintComponent 方法之外,这两种方法都不容易实现。对于大多数应用程序来说,简单的方法是最好的:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    • 2011-12-20
    • 2012-03-14
    • 2014-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多