【问题标题】:Change JButton Shape while respecting Look And Feel在尊重外观和感觉的同时更改 JButton 形状
【发布时间】:2011-10-23 02:31:57
【问题描述】:

我知道这个问题已经被问了一百万次,可以通过覆盖paintComponent() 来完成,但我想知道的是如何在尊重当前外观的同时改变形状。如果我想将形状更改为圆形,我还希望按钮看起来像一个按钮,只是形状不同。

我尝试制作一个 JButton,覆盖 paintComponent,然后将其剪裁成一个圆圈,但我没有在 Nimbus LAF 上获得边框效果。

有没有更好的方法?或者JButton中有方法吗?

【问题讨论】:

  • PieceButton 有一轮 Icon 可能会让你开始使用 sscce
  • 每个 LAF 的组件都是唯一的。因此,每个 LAF 的形状/大小/颜色/字体都是独一无二的。如果要更改组件的形状,则需要为给定的 LAF 重写 UI。除非您的 LAF 支持圆形边框,否则您将无法执行此操作。没有捷径可走。您需要编写所有代码。
  • @camickr 在不知道当前LAF的情况下如何做到这一点???

标签: java swing look-and-feel paint


【解决方案1】:

使用 ComponentUI 来绘制组件。这个 UI 类有一个paint 方法,用于绘制组件。 paint 方法使用 L&F 的设置,这些设置作为属性存储在 UIManager 中。

创建您自己的组件 RoundButton 扩展自例如AbstractButton 你可以创建自己的RoundButtonUI(可能从ButtonUI 扩展)。在这里,您可以使用普通按钮的属性(如Button.fontButton.foreground)创建自己的绘制方法,以绘制具有与普通按钮相同的 L&F 值的您自己的组件。

在您的RoundButton 类中,您应该实现方法getUIClassID(),它将返回字符串"RoundButtonUI"。这会导致您的 RoundButtonUI 被使用。

一个很好的例子是JButton 本身。

【讨论】:

  • 我想这可能是它,虽然它仍然不能使形状按钮看起来很完美
  • 我在制作新的 L&f 时经常使用它,您必须注意所有边框和插图等是否正确,以使 LayoutManager 正确处理组件。也许你可以发布你的代码。
  • 谢谢,我做了一些调整。我认为它看起来不错,并且由于Nimbus的编写方式,它仍然保留了边框效果!
猜你喜欢
  • 1970-01-01
  • 2011-02-22
  • 2019-06-11
  • 2019-03-03
  • 2010-09-23
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多