自定义Swing组件:关于方法的问题

时间:2010-06-08 22:25:22

标签: java swing components

我正在尝试构建一个新的java swing组件,我意识到我可能能够找到一个在网络上做我需要的东西,但这部分是我练习学习这项工作的练习。

我想构建一个代表甘特图的摇摆组件。它会很好(虽然不是必须让人们能够与它互动(例如滑动任务以调整时间)

感觉最好的方法是将JComponent子类化,并覆盖PaintComponent()以“绘制图片”应该是什么样子的图片,而不是像尝试堵塞一样一切都变成了自定义JTable

我已经阅读了几本关于这个主题的书,并且还看了几个例子(最值得注意的是像JXGraph这样的东西) - 但我对一些事情感到好奇

  • 我什么时候必须切换到使用UI代表,何时可以坚持在paintcomponent()中摆弄以呈现我想要的内容?

  • 如果我想将其他swing组件作为我组件的子元素(例如我想在我的甘特图上添加一个文本框)

    • 我可以不再使用paintComponent()吗?
    • 我可以在甘特图中任意定位它们,还是必须使用普通的摆动布局管理器
非常感谢提前。

-Ace

2 个答案:

答案 0 :(得分:10)

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

  • 与用户的交互 - 鼠标,键盘等。
  • 绘画
  • 根据需要创建“worker”子组件

从中期和长期来看,这是在Flamingo component suite中一遍又一遍地验证的方法,您可以将其用作额外的参考点(除了核心Swing组件的实现方式)。

答案 1 :(得分:4)

  • 如果您认为您的组件对于不同的外观和感觉看起来不同,那么使用UI委托是个好主意。从设计的角度来看,将演示文稿与组件分开

  • 通常也是一个好主意
  • 即使覆盖paintComponent,您仍然可以在其上放置任何子组件。

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

这对你来说非常好starting point