【问题标题】:Group java components分组 java 组件
【发布时间】:2011-01-15 18:04:07
【问题描述】:

我正在使用GridBagLayout 在 Java 中创建一个 GUI。我有什么方法可以创建一个组件组,以便我可以将引用传递给该组并可以访问所有这些组件?

我考虑过创建一个面板并以这种方式对组件进行分组,但我想知道是否还有其他方法可以利用 GridBagLayout 的复杂性。

非常感谢!

【问题讨论】:

  • “可以访问所有这些”是什么意思?
  • 我有一堆JLabels、JTextFields 和JButtons。标签描述了文本字段中的内容,按钮将更改文本字段中的内容。我的问题实际上如下:有没有办法从按钮的动作侦听器中知道哪个文本字段与特定按钮相关联?
  • Map 也许吧。

标签: java swing gridbaglayout


【解决方案1】:

好吧,如果您无法使用 JLabel、JTextField 和 JButton 创建一个包含您的组的 bean,您可以随时在主 ui 面板中使用 Map 来注册元素,同时添加它们。 像

这样的结构
Map<K, List<Component>>

可能会起作用,其中 K 是组的标识符。这样,您就可以将组件与它们在 ui 中的放置方式分离。

【讨论】:

    【解决方案2】:

    您应该将面板视为只写。您在那里安装组件,所有组件都已设置并具有正确的布局约束。你(几乎)从不去搜索组件。

    而是在您设置时将组件添加到Set(或类似名称)。然后,您可以对集合执行非常干净的 for 循环以执行适当的任务。一种更高级的技术是让单独的观察者(监听者)刷新模型中的组件。

    【讨论】:

    • 我永远不会认为面板是只写的。你必须有一些漂亮的静态 UI。我经常添加和删除组件,例如我可能会使用装饰模式向小部件添加/删除内容以指示错误或指示某些内容。此外,许多应用程序会根据数据动态生成视图,或者可能使用 bean 属性或反射从数据中填充手动创建的 UI。
    • “add”和“remove”是写/不读操作。 (我实际上倾向于隐藏/显示而不是添加/删除,尽管添加/删除对非表格表很有用。)
    • 对不起,我误解了你的评论,当你说只写时,我以为你的意思是敲面板上的东西,就是这样,我很抱歉。我喜欢 gridbags 并找到替换它已经存在的东西并替换它会产生所需的结果。
    【解决方案3】:

    通常的方法是按照您的建议使用 JPanel。请记住,JPanel 本身可能有自己独立的布局管理器。因此,您可以在 JPanel 上使用 GridBagLayout 来定位面板上的元素。

    【讨论】:

    • 此解决方案的唯一问题是您可能很难将外部和内部面板的组件对齐...
    • @Guillaume 需要仔细规划才能创建有效的布局。但是组件在面板中的分组方式以及面板彼此相邻放置的方式会影响您提到的对齐方式的外观。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多