【问题标题】:Custom Swing component: questions on approach自定义 Swing 组件:方法问题
【发布时间】:2023-03-21 17:40:01
【问题描述】:

我正在尝试构建一个新的 java swing 组件,我意识到我可能能够在网络上找到一个满足我需要的组件,但这部分是我学习如何做到这一点的练习。

我想构建一个代表甘特图的摆动组件。这会很好(尽管人们能够与之交互并不是必需的(例如滑动任务以调整时间)

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

我已经阅读了几本关于该主题的书籍,还查看了一些示例(最值得注意的是 JXGraph 之类的东西) - 但我对一些事情感到好奇

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

  • 如果我想要其他摆动组件作为我的组件的子元素(例如,我想要甘特图上的文本框)

    • 我可以不再使用paintComponent()吗?
    • 我可以在甘特图中任意放置它们,还是必须使用普通的挥杆布局管理器

提前非常感谢。

-王牌

【问题讨论】:

    标签: java swing components


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:
      • 如果您认为您的组件在不同的外观和感觉上应该看起来不同,那么使用 UI 代理是一个好主意。此外,从设计的角度来看,将演示文稿与组件分开通常是一个好主意

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

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

      这是一个非常适合您的starting point

      【讨论】:

      • 是的......在基里尔发布他的答案之前仅 2 小时 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-14
      • 2017-10-10
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多