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
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
meibo3(String title)の中でint id = Integer.valueOf(gaku.getText()).intValue();などを実行していますが、この時点ではJTextFieldにまだ何も入力されていないはずです。
入力が終わってからJTextFieldの内容を参照してください。それから、KeyListenerをセットしていないのでkeyPressed(KeyEvent ke)は呼ばれることがありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- その他(プログラミング・Web制作) pythonのグローバル変数 2 2022/11/25 18:02
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列にnullを代入すると、null...
-
マイクラでPythonのプログラミ...
-
変数名とDBカラム名の関係性に...
-
改行含むテキストの表示の仕方
-
プログラミングの問題です。大...
-
JAの支部?地域の農協のカード...
-
えハミルトン路と全域木のちが...
-
CSV出力を画面から選択したデー...
-
ショートカットキーについて
-
list の空は [] ってあわらすのに
-
あんまりお料理しないのに台所...
-
質問です。 配列が100以上の場...
-
次のhtml・cssでspan内の文字を...
-
Jupyter notebookですわかりま...
-
Eclipse 動的プロジェクトで404...
-
下記問題の答えが"D"になる意味...
-
JaneStyleのスレッドが見れなく...
-
キー入力について
-
jdk17.06のインストーラーが起...
-
リレーションエンティティクラ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラミングの問題です。大...
-
配列にnullを代入すると、null...
-
マイクラでPythonのプログラミ...
-
JAの支部?地域の農協のカード...
-
eclipse実行ができない
-
Eclipse 動的プロジェクトで404...
-
下記問題の答えが"D"になる意味...
-
正規表現について質問です。 カ...
-
list の空は [] ってあわらすのに
-
「main メソッドを持つクラスが...
-
あんまりお料理しないのに台所...
-
JaneStyleのスレッドが見れなく...
-
jdk17.06のインストーラーが起...
-
eclipseで作ったプログラムを他...
-
改行含むテキストの表示の仕方
-
キー入力について
-
CSV出力を画面から選択したデー...
-
Processingでマウスクリックで...
-
次のhtml・cssでspan内の文字を...
-
JSFタグのfタグとは
おすすめ情報