在 JPanel 中获取组件的值

Posted

技术标签:

【中文标题】在 JPanel 中获取组件的值【英文标题】:Fetching values of components in JPanel 【发布时间】:2012-08-18 16:24:58 【问题描述】:

我在一个 Jframe 中有两个 JPanel。上面板有一个 JCombobox。根据上面板组合框中的选择,下面板由各种组件动态填充。要添加到下面板的组件的类型和数量始终是动态的。下面的例子-

下 JPanel:

JLabelA:JCombobox

JLabelB:JCombobox + JTextfield

JLabelC:JCombobox1 + JCombobox2 + JCombobox3

JLabelD: JList

用户可以在所需组件中选择/键入值,然后单击提交按钮。点击按钮。我需要进行自定义验证(例如,一些组件是强制性的,一些是可选的,在上面的 JLabelC 的情况下,已在所有三个组合框中选择了值)。通过所有验证后,我需要在下部面板中获取用户选择/提供的值。请注意,下部面板中的组件名称不固定,因此我无法直接获取值。一种方法是逐个遍历下部面板中的所有组件并选择值。这似乎不是很有效,因为我需要遍历所有内容,而我只需要遍历用户提供了一些输入的那些。

查询-

1) 我们如何将验证附加到组件(就像我们在 javascript 验证中所做的那样)?

2) 请提出获取组件值的替代方法。

【问题讨论】:

在创建/布局组件时能否保留对组合框等的引用? 是的,我可以。但是我看到的问题是——我将如何区分两个 JTextFields 或 JcomboBoxes?上面示例中给出的四种组件组合是四种“类型”,每种“类型”都可以在面板中出现多次。创建每个“类型”的代码是相同的,并且会被多次调用。我说清楚了吗? 【参考方案1】:

我已经看到(遗留)代码遍历 JComponents 并将多用途侦听器绑定/取消绑定到组合框、文本字段等。我记得它工作正常(它用于将“脏”侦听器附加到所有可编辑的防止用户留下未保存的更改的小部件)。

如果要进行实时验证,可以将 ChangeListeners 或 ActionListeners 附加到 JComboBoxes 或 JLists 和 DocumentListeners 到 JTextField 文档。我尝试过使用 InputVerifiers,但是当你搞砸组件焦点时,这通常会给用户带来问题。

【讨论】:

以上是关于在 JPanel 中获取组件的值的主要内容,如果未能解决你的问题,请参考以下文章

从动态添加的 jPanel 中获取文本

关于在swing的两个JPanel钟一个事件监听器中修改了数组成员变量内容后,再在另一个事件监听器中获取数组成员变量的值发现仍然是初始化时的值没有获取到在另一个事件监听器对它的修改

在 JPanel.getComponents() 中循环时如何获取 JButton 属性

如何从 Jpanel 中的 JTextField 获取值并将其发送到其他 JPanel?

如何获取JPanel中某个点的颜色? [关闭]

我自己的组件中的一个面板中有两个不同的按钮