【发布时间】:2020-12-05 10:29:44
【问题描述】:
因此,此程序从数据库 "getReprt" method 中获取值 car_number,并将名称作为来自 db 的值赋予按钮。此外,接下来我需要获取此值,以便为每个按钮的动作侦听器btn_listener 获取它自己的值。但是这个代码,我只得到最后一个数据值,每个按钮都是一样的。如何给每个 actionlistener 情况不同的值?
我做错了什么?
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
public class Car2q {
private Connection con;
private ResultSet rs;
static JTextArea textArea = new JTextArea();
static login frame = new login();
static JScrollPane scrollPane = new JScrollPane();
static JSplitPane splitPane = new JSplitPane();
static JPanel panel_left = new JPanel();
static JPanel panel_right = new JPanel();
static class login extends JFrame {
public static void main(String[] args) throws Exception {
final Car2q c2q = new Car2q();
c2q.getReport();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
frame.setSize(550, 300);
frame.setVisible(true);
frame.add(splitPane);
splitPane.setSize(550, 300);
splitPane.setLeftComponent(scrollPane);
splitPane.setLeftComponent(panel_left);
splitPane.setRightComponent(panel_right);
panel_left.setLayout(new GridLayout(0, 1, 5, 5));
panel_right.setLayout(new GridLayout(0, 2, 5, 5));
}
}
public Car2q() {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
con = DriverManager.getConnection("");
con.createStatement();
}
catch (Exception e) {
System.out.println("Error: " + e);
}
}
public String getReport() {
String car_number = null;
String report = null;
List car_number_list = new ArrayList<>();
try {
PreparedStatement st = null;
String query2 = "select * FROM car_register";
st = con.prepareStatement(query2);
rs = st.executeQuery();
while (rs.next()) {
car_number = rs.getString("car_number");
String gotit = rs.getString("car_number");
JButton btn = new JButton(gotit);
btn.setSize(100, 100);
panel_left.add(btn);
ActionListener actionListener = new btn_listener();
btn.addActionListener(actionListener);
}
}
catch (SQLException e) {
e.printStackTrace();
}
return car_number;
}
public class btn_listener implements ActionListener {
public void actionPerformed(ActionEvent arg0) {
Car2q c2q = new Car2q();
String car = c2q.getReport();
System.out.println(car);
}
}
}
【问题讨论】:
-
将值传递给 btn_listener 构造函数并将其存储在该类的字段中。
-
Java 命名约定的类名以大写字母开头,并且使用不带下划线的 CamelCase。示例:BtnListener。
-
@tgdavies 我是 Java 新手,你能说得更具体点吗?)你说的类似
public class btn_listener implements ActionListener { public btn_listener(){ try { public void actionPerformed(ActionEvent arg0) { Car2q c2q = new Car2q(); String car = c2q.getReport(); System.out.println(car); } } }
标签: java mysql swing actionlistener