GUIで2つのjComboBoxを使用する単純なデータベースアプリケーションを設計しています。最初のjComboBoxには、SQLクエリの結果が格納されます。 2番目のjComboBoxに、最初のボックスにユーザーが選択した値を組み込んだ2番目のクエリの結果を入力するようにしたいが、それを正常に動作させることはできない。選択したJComboBoxの値を取得し、2番目のJComboBoxのSQLクエリに追加します。
私は2つのクラスを作成しました.1つはGUIを描画し、mainメソッドを含み、もう1つはクラスをクエリします。
私のGUIクラス:
public class TestUI extends javax.swing.JFrame {
// Create new form TestUI
public TestUI() {
initComponents();
}
@SuppressWarnings("unchecked")
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jComboBox1 = new javax.swing.JComboBox<>();
jTextField1 = new javax.swing.JTextField();
jComboBox2 = new javax.swing.JComboBox<>();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
// Combo box 1 population
jComboBox1.removeAllItems();
createConnection c1 = new createConnection();
c1.getEmployee().forEach((employee) -> {
jComboBox1.addItem(employee);
});
jComboBox1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jComboBox1ActionPerformed(evt);
}
});
// ComboBox 2 population
jComboBox2.removeAllItems();
}
private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add handling code here:
}
public static void main(String args[]) {
DRAW GUI
}
}
そして、私のデータベースクラス:私はDB接続変数およびGUI座標などのように
を無関係なコードを残している
import java.util.List;
import java.util.ArrayList;
import java.sql.*;
public class createConnection {
String empName;
public Connection createConnection() {
try {
Class.forName(driver);
java.sql.Connection conn = DriverManager.getConnection(DB_URL, DB_username, DB_password);
return conn;
} catch (ClassNotFoundException | SQLException e) {
return null;
}
}
// ComboBox 1
public List<String> getEmployee() {
List<String> list = new ArrayList();
Connection conn = createConnection();
try {
Statement stmt = conn.createStatement();
String query = "SELECT * FROM hr.employees ORDER BY last_name";
ResultSet results = stmt.executeQuery(query);
while (results.next()) {
list.add(results.getString("last_name"));
}
} catch (Exception e) {
System.out.println("Exception = " + e);
}
return list;
}
// Combo Box 2
public List<String> getEmpLocation() {
List<String> list = new ArrayList();
Connection conn = createConnection();
try {
Statement stmt = conn.createStatement();
String query = "SELECT country_id FROM hr.location WHERE hr.location.emp_name = " + empName;
ResultSet results = stmt.executeQuery(query);
while (results.next()) {
list.add(results.getString("last_name"));
}
} catch (Exception e) {
System.out.println("Exception = " + e);
}
return list;
}
}
私はどのように疑問に思ってデータベースクラスのgetEmpLocation()メソッドを適切に取得して、2番目のComboBoxに移入します。これは、両方のクラスにコードを追加し、変数値を渡すことになりますが、私はそれを理解できません!どんな助けでも大いにここに評価されるでしょう。
[コンボボックスの使い方](https://docs.oracle.com/javase/tutorial/uiswing/components/combobox.html)を見てみると、[' JComboBox#getSelectedItem'](https://docs.oracle.com/javase/8/docs/api/javax/swing/JComboBox.html#getSelectedItem--)。次に、[メソッドまたはコンストラクタへの情報の受け渡し](https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html)、[Prepared Statementsの使用](http:// docs .oracle.com/javase/tutorial/jdbc/basics/prepared.html) – MadProgrammer
および[try-with-resourcesステートメント](https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html ) – MadProgrammer
[* Dynamic JComboBoxes *](http://stackoverflow.com/q/3191837/230513)の可能な複製。 – trashgod