2010-06-08 68 views
3

我想构建一个新的java swing组件,我意识到我可能能够找到一个能够在网络上做我所需要的功能,但这对我来说部分是一个练习。学习要做到这一点。自定义Swing组件:关于方法的问题

我想构建一个代表甘特图的swing组件。这将是很好的(虽然不是必要的人们能够与它进行交互(例如滑动任务周围以调整时间)

它感觉最好的方法是子类JComponent,并覆盖PaintComponent()为'绘制一张图片“,而不是像试图将所有东西都塞进一个自定义的东西JTable

我已经阅读了几本关于这个主题的书,还看了几个例子(最值得注意的是像JXGraph的东西) - 但我很好奇几件事

  • 什么时候我必须切换到使用UI委托,以及什么时候可以坚持在paintcomponent()中渲染我想要的东西?

  • ,如果我想其他Swing组件作为我的组件的子元素(例如,我想一个文本框,我的甘特图)

    • 我可以不再使用的paintComponent()?
    • 可以随意我我的甘特图中定位他们,还是我用普通摆动布局管理器

许多在此先感谢。

-Ace

回答

10

我认为the article我几年前写的java.net今天仍然是正确的。在一个单一的课堂上做所有事情可以让你在开始的时候更快,但是变得非常混乱。我强烈建议在模型(在你的主类)和视图(UI委托)之间进行分离。该视图负责:

  • 与用户的交互 - 鼠标,键盘等
  • 在必要时创建

在中期和长期来看,这种“工人”子是已经被验证了一遍又一遍在Flamingo component suite的方法,它可以作为一个额外的参考使用点(除了核心Swing组件的实现之外)。

+0

+1我经常依赖和引用这篇文章。 – trashgod 2010-06-09 02:38:56

4
  • 使用UI委托是一个好主意,如果你认为你的组件应该寻找不同的不同的外观和感觉。从设计角度来看,通常也是一个好主意,可以将演示文稿从组件中分离出来

  • 即使覆盖paintComponent,您仍然可以在其上放置任何子组件。

  • 使用null布局,您可以定位组件。或者,您也可以使用布局。

这是一个非常好的starting point给你。

+0

+1同一文章! :-) – trashgod 2010-06-09 02:40:12

+0

是的......只有在Kirill发布他的答案前2个小时:) – 2010-06-09 11:33:34