【问题标题】:Java Swing JTextField.getText is not returning a valueJava Swing JTextField.getText 没有返回值
【发布时间】:2017-04-29 21:54:18
【问题描述】:

我目前正在开发一个插入 SQL 数据库的程序。我的插入工作正常。我创建了一个带有 8 个 JTextField 的窗口,供用户输入他们的信息。但是,我无法从 JTextField 中获取信息。例如,当我尝试打印时,我得到了空白值,var1。我的语法错了吗? -postToTable 是另一个类中的静态方法,用于将用户添加到数据库。

private void initialize() {
    textField_FName = new JTextField();
    textField_FName.setBounds(239, 32, 130, 26);
    frame.getContentPane().add(textField_FName);
    textField_FName.setColumns(10);
    vari0 = textField_FName.getText();

        btnSubmit = new JButton("Submit");
    btnSubmit.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {

            try {
                JOptionPane.showMessageDialog(null, "('"+vari0+"','"+vari1+"','"+vari2+"','"+vari3+"','"+vari4+"','"+vari5+"','"+vari6+"','"+vari7+"')");


                DB_Jpanel.postToTable(vari0,vari1,vari2,vari3,vari4,vari5,vari6,vari7);

            } catch (Exception e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            try {
            } catch (Exception e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }
    });
    btnSubmit.setBounds(143, 249, 117, 29);
    frame.getContentPane().add(btnSubmit);

}
}

【问题讨论】:

    标签: java swing jtextfield


    【解决方案1】:

    在创建 JTextField 之后,在用户有时间在其中放置文本之前,立即通过调用 getText() 来提取 JTextField 的文本。这不是 Swing GUI 或任何事件驱动 GUI 的工作方式。关键是要了解事件驱动编程的工作原理,而不是从 JTextField 中提取文本,例如调用 getText() 以响应事件,在按钮的 ActionListener 中。当用户按下按钮时,该代码将被调用,希望在他将相关文本放入 JTextField 之后。

    所以改成这样:

    private void initialize() {
        textField_FName = new JTextField();
    
        // ....
    
        // vari0 = textField_FName.getText();  // ****** remove this *****
    
        btnSubmit = new JButton("Submit");
        btnSubmit.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
    
                vari0 = textField_FName.getText(); // ***** add this ******
    
                try {
                    JOptionPane.showMessageDialog(null, "('"+vari0+"','"+vari1+"','"+vari2+"','"+vari3+"','"+vari4+"','"+vari5+"','"+vari6+"','"+vari7+"')");
                    DB_Jpanel.postToTable(vari0,vari1,vari2,vari3,vari4,vari5,vari6,vari7);
                } catch (Exception e1) {
                    e1.printStackTrace();
                }
            }
        });
    
        // ...
    
    }
    

    注意事项:

    • 您可以将ActionListeners 添加到多个JButtons,实际上您可以将它们添加到JTextFields。此处,当文本字段获得用户焦点并且用户按下 ENTER 键时,侦听器被激活。
    • 您的代码看起来正在使用空布局和绝对定位。虽然空布局和setBounds() 对于 Swing 新手来说似乎是创建复杂 GUI 的最简单和最好的方法,但创建的 Swing GUI 越多,使用它们时遇到的困难就越严重。当 GUI 调整大小时,它们不会调整您的组件大小,它们是增强或维护的皇家女巫,放置在滚动窗格中时它们完全失败,在与原始不同的所有平台或屏幕分辨率上查看时它们看起来很糟糕.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-29
      • 2016-05-05
      • 1970-01-01
      • 2014-03-12
      • 1970-01-01
      • 2020-06-11
      相关资源
      最近更新 更多