Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自定义Swing组件:关于方法的问题_Java_Swing_Components - Fatal编程技术网

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

Java 自定义Swing组件:关于方法的问题,java,swing,components,Java,Swing,Components,我正在尝试构建一个新的JavaSwing组件,我意识到我可能能够找到一个在web上实现我所需要的功能的组件,但这对我来说是一个学习如何实现这一点的练习 我想构建一个表示甘特图的swing组件。这会很好(虽然对人们能够与之互动不是必需的(例如,滑动任务以调整时间) 感觉最好的方法是将JComponent子类化,并覆盖PaintComponent()以“绘制”图表的外观,而不是尝试将所有内容都塞进自定义JTable 我读过几本关于这个主题的书,也看过一些例子(最著名的是像JXGraph之类的东西)—

我正在尝试构建一个新的JavaSwing组件,我意识到我可能能够找到一个在web上实现我所需要的功能的组件,但这对我来说是一个学习如何实现这一点的练习

我想构建一个表示甘特图的swing组件。这会很好(虽然对人们能够与之互动不是必需的(例如,滑动任务以调整时间)

感觉最好的方法是将
JComponent
子类化,并覆盖
PaintComponent()
以“绘制”图表的外观,而不是尝试将所有内容都塞进自定义
JTable

我读过几本关于这个主题的书,也看过一些例子(最著名的是像JXGraph之类的东西)——但我对一些事情很好奇

  • 什么时候我必须切换到使用UI委托,什么时候我可以坚持在
    paintcomponent
    ()中摆弄来呈现我想要的东西

  • 如果我希望其他swing组件作为组件的子元素(例如,我希望甘特图上有一个文本框)

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

-Ace

  • 如果您认为您的组件应该因不同的外观和感觉而看起来不同,那么使用UI委托是一个好主意。从设计的角度来看,将您的演示文稿与组件分离通常也是一个好主意

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

  • 使用空布局可以任意定位组件。或者也可以使用布局
这是一个非常好的例子。

我认为几年前我为java.net编写的代码今天仍然是正确的。在一个单一类中完成所有操作可以让您在开始时加快速度,但很快就会变得一团糟。我强烈建议在模型(在主类中)和视图(UI委托)之间进行分离。该视图负责:

  • 与用户交互-鼠标、键盘等
  • 绘画
  • 根据需要创建“工作者”子组件

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

是的……仅在Kirill发布答案前2小时:)