java - 无法从另一个 jFrame 获取值

标签 java swing jframe

我想使用 jFrame 等访问器方法将多个 jTextBox 的值从一个 jFrame 填充到另一个中,例如

String getNameVal()
{
     return jTextBox1.getText();
}

如何从另一个jFrame调用这些方法?

最佳答案

建议:

  1. 听起来您的 GUI 代码适合制作 JFrame,如果是这样,您将希望避免这种情况。让您的类扩展 JFrame,迫使您创建和显示 JFrame,而通常需要更大的灵 active ,您就会陷入困境。事实上,我敢说我创建的和见过的大多数 Swing GUI 代码都扩展 JFrame,而且事实上您很少会想要这样做这。
  2. 更常见的是,您的 GUI 类将用于创建 JPanel,然后可以将其放入 JFrame 或 JDialogs 或 JTabbedPanes 中,或者在需要的地方通过 CardLayout 进行交换。这将大大增加 GUI 编码的灵 active 。
  3. 这个问题与您的问题有直接关系。我猜你的主要问题不是如何为类提供 getter 方法,以及如何让其他类调用 getter 方法。更常见的是,当面临从一个 GUI View 提取信息到另一个 GUI View 的问题时,问题是何时提取信息。如果您将第二个窗口显示为非模态 JFrame,然后让调用类立即从第二个 JFrame 中提取数据,您将得到无意义的数据,因为您将在用户有时间进行交互之前提取数据使用第二个窗口并输入数据。
  4. 当使用非模态窗口从用户处获取信息时,一种可能的解决方案是使用 WindowListener,这样您就可以在用户完成对第二个窗口的处理时收到通知,这样现在就可以安全地提取数据.
  5. 通常更好的是第二个窗口不是非模态窗口,如 JFrame,而是模态窗口,例如模态 JDialog。当调用代码显示模式对话框时,调用代码中的所有代码流都会停止,直到对话框不再可见。在这种情况下,不需要 WindowListener,因为您将确切地知道对话框何时被处理(在将其设置为可见后立即在代码行上),因此可以轻松地从中提取数据。
  6. Andrew Thompson 在评论中已经提到了一个很好的变体——使用 JOptionPane。不要对这个选项大便,因为 JOptionPanes 是强大的工具,可能比您意识到的更强大,因为它们可以保存完全形成的复杂 JPanel View ,并且行为就像上面描述的那样,作为模式对话框。
<小时/>

如果您需要更具体的帮助,请随时对此答案发表评论。另外,如果是这样,请考虑创建并发布 Minimal, Complete, and Verifiable Example Program您将代码压缩为仍然可以编译和运行的最小位,没有外部依赖项(例如需要链接到数据库或图像),没有与您的问题无关的额外代码,但仍然演示了您的问题。

<小时/>

编辑
对于我的mcve上述建议的代码示例,请我回答以下 StackOverflow 问题:

关于java - 无法从另一个 jFrame 获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25821874/

相关文章:

java - 如何让 KeyListener 使用主线程而不是 EDT?

java - 从动态模型生成 View

javascript - freemarker、java和javascript之间的引用问题

java - Android Studio 无法为文件创建 MD5 哈希值

java - 如何使用 Java 打印文档?

Java Swing : Anchor images to the corners of a JFrame

java - 从 JFrame 监听内部 JPanel 上的操作

java - 如何读取另一个jar文件中的文件?

java - 组件在添加时删除图像

用于指定框架大小的 Java Swing 应用程序