javaプログラムについて
javaのプログラムで入力項目をDBに書き込むというプログラムを作成しているのですが、
コンソール形式だと成功するのですが、テキストボックスなどをおいて、GUI形式でやろうとするとキーイベントの中の変数ににうまく値が参照されません
以下ソース
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import java.awt.Container;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Date;
class meibo3 extends JFrame implements KeyListener {
public static void main(String args[]) {
meibo3 frame = new meibo3("タイトル");
frame.setVisible(true);
}
// private String name;
// private String shu;
// private int id;
// private int su;
meibo3(String title) {
setTitle(title);
setBounds(100, 100, 300, 250);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel p = new JPanel();
p.setLayout(null);
JLabel lmeibo = new JLabel("【名簿入力】", SwingConstants.CENTER);
lmeibo.setBounds(100, 10, 80, 30);
JLabel lgakuno = new JLabel("学生番号", SwingConstants.CENTER);
lgakuno.setBounds(30, 40, 80, 30);
JLabel lname = new JLabel("氏 名", SwingConstants.CENTER);
lname.setBounds(200, 40, 80, 30);
JLabel lshu = new JLabel("入力を終了しますか?(Y/N)");
lshu.setBounds(30, 120, 200, 30);
JTextField gaku = new JTextField(4);
gaku.setBounds(30, 70, 80, 30);
JTextField namae = new JTextField(20);
namae.setBounds(200, 70, 80, 30);
JTextField y = new JTextField(20);
y.setBounds(200, 120, 20, 30);
y.addKeyListener(this);
;
p.add(lmeibo);
p.add(lgakuno);
p.add(lname);
p.add(gaku);
p.add(namae);
p.add(y);
p.add(lshu);
Container contentPane = getContentPane();
contentPane.add(p, BorderLayout.CENTER);
int id = Integer.valueOf(gaku.getText()).intValue();
String name = namae.getText();
int nsu = namae.getText().length();
String yn =y.getText();
//method(id,name,nsu,yn);
}
public void keyPressed(KeyEvent ke) {
// TODO 自動生成されたメソッド・スタブ
if (ke.getKeyCode() == ke.VK_ENTER) {
//private void method(int id, String name, int nsu, String yn){
Date d = new Date();
SimpleDateFormat dfd = new SimpleDateFormat("yyyy-MM-dd");
Connection con = null;
String day = dfd.format(d);
// System.out.print(day);
PreparedStatement ps = null;
try {
// ドライバクラスをロード
Class.forName("com.mysql.jdbc.Driver");
// データベースへ接続
con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/hellodb", "root",
"root");
Statement stmt = (Statement) con.createStatement();
// name,bloodType,ageのデータを検索するSQL文を作成
String sql = "INSERT INTO hellodb.meibo VALUES(" + id
+ ",'" + name + "','" + day + "');";
System.out.println(sql);
if (id > 4 && nsu > 20) {
// JOptionPane.showMessageDialog(this, "学生番号が4桁以上、氏名が20文字以上になっています。", "Error",
// JOptionPane.ERROR_MESSAGE);
} else {
if (id < 5) {
// JOptionPane.showMessageDialog(this,
// "学生番号が4桁以上になっています", "Error",
// JOptionPane.ERROR_MESSAGE);
} else {
if (nsu > 20) {
// JOptionPane.showMessageDialog(this,
// "氏名が20文字以上になっています。", "Error",
// JOptionPane.ERROR_MESSAGE);
} else {
if (yn.equals("y") || yn.equals("y")
|| yn.equals("Y") || yn.equals("Y")) {
// ps = con.prepareStatement(sql);
stmt.execute(sql);
// JOptionPane.showMessageDialog(this,
// "成功しました", "Info",
// JOptionPane.INFORMATION_MESSAGE);
} else if (yn.equals("n") || yn.equals("n")
|| yn.equals("N") || yn.equals("N")) {
}
}
}
}
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
try {
// close処理
if (ps != null) {
ps.close();
}
// close処理
if (con != null) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
public void keyReleased(KeyEvent arg0) {
// TODO 自動生成されたメソッド・スタブ
}
public void keyTyped(KeyEvent arg0) {
// TOD
お礼
返事が遅くなって申し訳ありません。gimmickさんの回答のおかげで解決しました。ありがとうございました。