我目前正在开发一个插入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);
}
}
答案 0 :(得分:2)
在创建JTextField之后,以及在用户有任何时间在其中放置文本之前,您正在通过立即调用来提取JTextField的文本。这不是Swing GUI或任何事件驱动的 GUI的工作方式。关键是要了解事件驱动的编程是如何工作的,而是在按钮的ActionListener中从JTextField中提取文本,例如调用getText()
以响应事件。当用户按下按钮时,将调用此代码,并希望在他将相关文本放入JTextField之后。
改变如下:
getText()
注意:
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();
}
}
});
// ...
}
似乎是Swing新手,比如创建复杂GUI的最简单和最好的方法,但是你创建的Swing GUI越多,在使用它们时会遇到更严重的困难。当GUI调整大小时,它们不会调整组件的大小,它们是增强或维护的皇室女巫,当它们被放置在滚动窗格中时它们完全失败,当它们在所有平台上观看时或者与原始平台不同的屏幕分辨率时它们看起来很糟糕