【问题标题】:Which is the fastest way to insert component in Java Swing between other components?在 Java Swing 中,在其他组件之间插入组件的最快方法是什么?
【发布时间】:2013-01-02 04:08:36
【问题描述】:

我正在制作一种编辑器,它有一个块(JPanel)而不是单词(带有类似文本的流和光标 - 闪烁的 JPanel)。

在以下情况下,我需要一种在现有组件之间添加 Swing 组件(新块)的快速方法:

  • 在 JPanel 之间单击鼠标以将光标放在那里
  • 在现有元素之间添加新的块元素。

问题是,重建文档(.removeAll() 和 .add() 所有块)需要 3-4 秒,文档包含 300-400 个块。

我可以通过在每个块之间插入空块并将光标放在那里来轻松加快光标定位,但是如果我需要在现有块之间添加一个新的干净块怎么办?

我知道某种方法是创建我自己的“渲染引擎”,但我可以使用 Swing 组件更轻松地实现这一点吗?

【问题讨论】:

  • 你为什么使用 JPanel 作为文本?
  • 您真的需要订单吗?简单地add()ing 新组件并使用布局管理器将其放置在您想要的位置怎么样?或者,您是否尝试过add(Component comp, int index) (docs.oracle.com/javase/7/docs/api/java/awt/…, int)?
  • @shuangwhywhy为什么我用JPanel作为一组词,一个在另一个+一些小动作按钮等。
  • 我会尝试使用索引。 LayoutManager 并不是那么简单,因为它是一个复杂的布局,涉及到 WrapLayout。请参阅我的另一个问题:stackoverflow.com/questions/13250043/…
  • 如需尽快获得更好的帮助,请发帖SSCCE

标签: java swing layout components


【解决方案1】:

我会说你应该只添加一个具有适当约束的块。然后 LayoutManager 的任务是在另一个块之间正确放置块并布局所有子组件。

【讨论】:

  • 没错,我的想法是一样的——这种方法是否还有其他限制(例如标签顺序或类似的)?
  • 我会在容器中保留一个组件列表。添加组件时,约束是列表中的顺序(添加组件的索引)。
  • Tab 顺序无所谓,但不写自己的 LayoutManager 是不是太难了?
  • 这个答案是正确的。在 FlowLayout 的特殊情况下(或者,像我的一样 - WrapLayoutFlowLayout 的子类),我们可以通过 add(Component comp, int index) 实现我们的目标,就像 Andreas 说的那样。我们可以通过检查 .getComponents() 数组找到所需的索引
  • 对我来说不是。只需在布局中覆盖几种方法即可扩展当前使用的一种方法。
【解决方案2】:

你需要编写自己的LayoutManager。

【讨论】:

  • 不一定,许多(对特定职位没有特殊限制的)经理可以很好地使用基于索引的加法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多