如何创建自定义Swing组件

时间:2009-05-05 01:19:23

标签: java swing jcomponent

我一直想用Java创建自定义组件,或者自定义现有组件,但我的搜索从未产生任何有用的东西。所以我决定问StackOverflow社区:

我在哪里可以找到有关自定义Java GUI组件的信息?

当我的意思是定制时,我不是在谈论改变颜色,字体等。我的意思是真的自定义它们。这是两个模型示例组件:

Custom Components Mockup

备注
我开始这个问题主要是为了找到如何创建上面两个自定义组件。但后来我意识到关于黑客摇摆组件的问题并不存在。所以我认为最好有一份资源清单。

如果您想知道模型中的两个组件是如何工作的,那么它是:

自定义的JScrollPane,每个方向都有两个Scrollbar。每个滚动条的行为都不同。例如,外部滚动正常,内部滚动以更Picasa的方式移动视图。我实际上从谷歌小组here得到了一个工作(!)答案,但那只是代码。

第二个是自定义JComboBox,当弹出列表展开时,它最后有一个JComponent。这可以是任何东西,从带有图标的简单JLabel到以某种方式操纵列表的JButton。

但这个问题不是关于那些具体的组成部分。这是关于寻找资源(网站,书籍,文章等)来学习如何创建它们

6 个答案:

答案 0 :(得分:17)

这篇文章How To Write a Custom Swing Component应该非常有用。它包括复制具有离散步骤和连续范围的Windows滑块控件。

答案 1 :(得分:15)

JDK是开源的。要了解如何编写Swing组件,没有比Swing组件的源更好的地方了。通常,在创建自定义组件时,您会对以下一项或多项感兴趣:{交互语义,可视化表示,组合结构}

从最简单的情况开始:

被动组件:JLabel
互动组件:JButton

JLabel将展示JComponent的准系统扩展,以便自定义绘制组件;在这种情况下,它将'text'字符串值绘制为其表示。

除了绘制组件之外,

JButton还将演示用户交互的准系统扩展。

答案 2 :(得分:9)

Filthy Rich Clients是一本关于这个主题的优秀,非常易读的书。它更多的是改进Swing组件的外观和感觉而不是创建全新的组件,但它确实进入了Swing的内部并提供了许多实际的例子。

答案 3 :(得分:4)

这是一个非常开放的问题,简单的简单回答是您将JComponent或其中一个后代子类化,并添加所需的功能。显然,根据你想要做的事情,这可能会有所不同。对于初学者,我建议您阅读Sun的tutorial on using Swing components,其中有关于如何使用scroll panespopup menus的示例。一旦您阅读了这些并进行了实验,您可能会有更具体的问题,这些问题将更容易让人们提供经过深思熟虑的答案。

如果模拟中的两个组件都是您想要实现的,那么让我们更好地了解您希望它们如何运行将会产生更好的答案。

答案 4 :(得分:1)

阅读Swing Hacks: Tips & Tools for Building Killer GUIs (Marinacci, Adamson)。恕我直言,这是一本有效处理摇摆乐的必备书。

答案 5 :(得分:1)

我个人认为上述答案过于笼统或含糊不清。此外,正如有人不可避免地会像我一样碰到这个话题,我不妨提供我发现的内容:

希望这会有所帮助......