gpt4 book ai didi

java - 如何将 JComboBox 事件处理程序的字符串放入变量中进行查询?

转载 作者:行者123 更新时间:2023-12-02 06:20:37 24 4
gpt4 key购买 nike

在 JCombobox 中是火车的可能路线。我想根据事件处理程序获取 JCombobox 的值,然后在使用数据库的类中使用它。该值将作为Mysql查询的参数。我已经成功获取它,但无法使用它。我对java不太有经验,我做错了。我在网站上搜索了类似的问题,看到了它们,但不清楚它们。我错过了什么?

//imports...

public class Cashier extends JFrame{

//here is main...
public Cashier(){

//some Window code...

final String[] Routes = {"--Select--", "value1",....."valueN" };
final JComboBox comboBox = new JComboBox(Routes);

comboBox.addActionListener(new ActionListener() {
/*-->*/ public String d;
public void WhereTo(String dest){

this.d=dest;
System.out.println(d);

// comes out correct!
/*I want d for use in DBaccess class as query parameter, by invoking
GetRoute()*/
}

public void actionPerformed(ActionEvent e) {
int val = comboBox.getSelectedIndex();
this.d= Routes[val];
WhereTo(d);

}
});
comboBox.setBounds(165, 124, 130, 23);
contentPane.add(comboBox);

//this method will be used by DBaccess

public String GetRoute(){

return d;
}

//More Objects...
}
}

这是我的 DBaccess 类,我想在其中使用字符串 d,可能通过调用 Cashier 的 Get Route() 来实现。

 public DBaccess extends Cashier{

//connection code....

// Executing the query
System.out.println("Creating statement...");
stmt = conn.createStatement();
String sql;

//probably like this...
String go = Cashier.GetRoute();

sql = "SELECT FROM reservations WHERE destination='"+go+"'";
ResultSet rs = stmt.executeQuery(sql);
}

最佳答案

这里:

String go = Cashier.GetRoute();

该方法不是静态的,不能以这种方式调用。无论如何,这都是一个糟糕的设计选择。考虑为 DBaccess 类提供所需路由的 setter。 actionPerformed() 实现应如下所示:

@override
public void actionPerformed(ActionEvent e) {
JComboBox comboBox = (JComboBox)e.getSource();
String selectedRoute = (String)comboBox.getSelectedItem();
DBaccess dbAccess = new DBaccess();
dbAccess.setRoute(selectedRoute);
dbAccess.setVisible(true);
}

一些对您有帮助的提示:

  • Cashier 扩展 JFrame:如果您不添加一些与 Swing 相关的功能,则不要从 swing 组件进行扩展。您可以使用一个简单的变量来代替。

  • DBaccess extends Cashier(从 JFrame 扩展):典型的 Swing 应用程序应该只有一个 JFrame。您应该使用 JDialog反而。请参阅The Use of Multiple JFrames, Good/Bad Practice?

  • DBaccess 类提供一个方法,以从另一个类 (Cashier) 设置所需的路线。

  • 您尝试执行的查询容易受到 SQL Injection 的攻击攻击。看看PreparedStatement以避免这种情况。

  • 如果 DBaccess 类将使用 Swing 组件显示查询结果,那么您可能需要查看 SwingWorker类在后台线程中执行数据库调用并更新 Event Dispatch Thread 中的 Swing 组件。看看Concurrency in Swing跟踪了解更多详细信息。

关于java - 如何将 JComboBox 事件处理程序的字符串放入变量中进行查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21066369/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com