从文本框中获取带有'静态'变量

时间:2014-07-17 11:39:45

标签: java sql swing jtextfield

我想从textfield contractNo获取文本。当前值从另一个类导入。但是,当我从textfield contractNo的内容设置String变量契约的值时,错误指出:"非静态变量契约不能从静态上下文引用,非静态变量contractNo不能从静态背景"

代码如下:

public static void main(final String user, final String cNo) {
    /* Set the Nimbus look and feel */
    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
    /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */
    try {
        for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
    } catch (ClassNotFoundException ex) {
        java.util.logging.Logger.getLogger(EditContract.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
        java.util.logging.Logger.getLogger(EditContract.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
        java.util.logging.Logger.getLogger(EditContract.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(EditContract.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }
    //</editor-fold>

    /* Create and display the form */


    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            EditContract editC = new EditContract();
            editC.contractNo.setText(cNo);
            editC.encoder.setText(user);
            editC.setVisible(true);

            fillData();

        }
         private void fillData() {

            try {


                contract = contractNo.getText();
                String sql = "Select engager, contactInfo, eventDate, eventtime, address, menu, contract, referred "
                        + "from kusinanikambal.contracts where contractno = 1234";
                Statement stmt = conn.createStatement();
                ResultSet rs = stmt.executeQuery(sql);
            }
                catch(SQLException ex){
                ex.printStackTrace();
            }


        }


    });
}

1 个答案:

答案 0 :(得分:2)

您的代码已损坏,需要多次重要修复。

  • 您无论如何都不应尝试直接访问类字段。如果需要获取类的字段的状态,则在该类的可行实例上调用公共方法。在这里,它可能是您的EditContract对象的一个​​字段,我猜,如果是这样,给EditContract一个暴露其JTextField内容的公共方法。
  • 如果EditContract不是模态对话框,即使您可以正确获取字段,您的代码也无法正常工作,因为您在用户有机会输入任何内容之前立即在显示GUI时提取数据。您似乎忽略了Java GUI是事件驱动的,这意味着您应该在事件中从GUI中提取信息,通常是菜单或按钮的ActionListener。换句话说,你的fillData()方法闻起来就像它不属于你所说的那样。

修改
您在评论中说明:

  

Filldata实际上应该在程序初始化时执行。

  • 如果这是真的,那么contractNo JTextField应该保持什么值,因为该方法是在用户与程序交互之前运行的?
  • 如果它需要在程序启动时运行,为什么不将它放在EditContract的构造函数中?

修改2

澄清一下,如果我的GUI类有一个JTextField并且我需要从其他地方访问它,我会做类似的事情:

public class MyGui {
  private JTextField myField = new JTextField(10);

  public String getFieldText() {
    return myField.getText();
  }

  // ....

}

然后,如果他们需要访问文本,其他类可以在MyGui实例上调用getFieldText()方法。