javaのプログラムで入力項目をDBに書き込むというプログラムを作成しているのですが、コンソール形式だと成功するのですが、テキストボックスなどをおいて、GUI形式でやろうとするとキーイベントの中の変数ににうまく値が参照されません。 y/nを入れるテキストボックスをエンターすると、YかNを判断し、DBに書き込むという方式です。以下ソース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) { // TODO 自動生成されたメソッド・スタブ } }
この機能は、特定のユーザーとの接触を避け、トラブルを防止するためにご用意しております。ブロックされたユーザーは、今後あなたの質問に回答ができなくなり、またそのユーザーの質問に対して、あなたも回答を投稿できなくなるという、重大な機能です。一度設定すると簡単に解除することができませんので、以下の点にご注意ください。
Sooda! は、ご利用者様同士の助け合いによって成り立つ知識共有サービスです。 多くの方に気持ちよくこのサイトを利用していただくために、事務局からのお願いごとがあります。
この投稿が、「禁止事項」のどの項目に違反しているのかを教えてください。 ご連絡いただいた内容がSooda! 事務局以外の第三者に伝わることはありません。
ご連絡いただきました内容は、当サイトの禁止事項に基づいて、事務局にて確認後、適切な対応をとらせていただきます。場合によっては、検討・対応に多少お時間を頂戴する場合もございます。
なお、誠に恐れ入りますが、今回のご連絡に関する対応のご報告は、結果をもって代えさせていただきます。対応の有無や判断基準に関しましては悪用を避けるため、事務局宛にお問合せいただきましても、ご回答およびメールのご返信はいたしかねますので、予めご了承くださいませ。
この質問を終了しますか?
質問をカテゴライズして、Sooda!をより良くしよう!
この質問を削除してもよろしいですか?
この回答を削除してもよろしいですか?
設定中のニックネームで質問したくない場合は、匿名で質問をすることが出来ます。 匿名で投稿する このニックネームを記憶する
一覧を見る