【问题标题】:Getting information from elements inside a CardLayout从 CardLayout 中的元素获取信息
【发布时间】:2016-02-09 14:35:48
【问题描述】:

我正在使用不同的面板,它们是 CardLayOut 的一部分,每个面板都有一些文本字段、下拉列表和复选框元素,我想做的是使用布局外部的按钮从每个元素中获取信息。 我已经找到了如何获取每个元素的属性,这是我对 Cardlayout 的定义:

    layCard= new CardLayout();
    MainPanel.setLayout(layCard);
    MainPanel.add("Panel1",InfoPanel);
    MainPanel.add("Panel2",selection);
    MainPanel.add("Panel3",questions);
    MainPanel.add("Panel4",summary);

这是我尝试获取 CardLayout 内 MainPanel 内面板内元素信息时的方法:

private void printValues(java.awt.event.ActionEvent evt) {                                     


    System.out.println(""+MainPanel.getComponent(0).getAccessibleContext().getAccessibleChild(2).getAccessibleContext().getAccessibleText());

}

在这种情况下,我正在访问 MainPanel 的元素 0,即 InfoPanel,并尝试从作为 JtextField 的 Child 2 获取值,但我无法弄清楚如何获取字段内的值,我不知道' 甚至不知道是否有一种方法可以帮助解决这个问题。 您对如何执行此操作有任何建议吗?

【问题讨论】:

  • 如果MainPanel.getComponent(0).getAccessibleContext().getAccessibleChild(2).getAccessibleContext().getAccessibleText() 给你JTextField,你为什么不简单地将它转换为JTextField 然后我们JTextField#getText() 方法?
  • 应该有类似 getValue() 的方法。这个方法应该返回一个“对象”对象,抓住那个对象并将其转换为字符串
  • 是的,问题是我有 JTextFields 和其他不返回字符串作为值的组件,我尝试按照@STaefi 所说的那样转换整个组件,它看起来像我预期的那样工作。感谢您的展位。
  • 整件事都不是一个好主意,除非你有一个非常动态的系统来创建和添加组件到随机面板。如果不是这种情况,请改变您的态度并确定用户输入在哪个面板中。然后使用所有组件的直接引用。
  • 如果你想坚持使用当前的代码,你应该在你的代码中放置一些instanceof 条件来确定每个虚拟组件的类型。然后您可以转换为它的真实类型并使用适当的方法来获取值,例如:JComboBox#getSelectedValue

标签: java jpanel cardlayout


【解决方案1】:

Components 添加到ArrayList 并简单地从相对索引(array[index]list.get(index))中调用它们。

如果您无法直接访问索引所需的数字,您可以简单地使用for 循环遍历ArrayList

这样您就知道Components 是什么对象类型,并且您可以安全地转换或直接访问正确的方法(getText() 等)。

【讨论】:

  • 谢谢,这可能是一个解决方案,我尝试过并且有效,问题是我已经有很多代码,并且为每个面板实现这个解决方案会更加困难。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-03
  • 2012-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多