首页 > 解决方案 > 在尝试其他方法中获取字符串的值

问题描述

因此,这个 progcar_number从数据库中获取值"getReprt" method,并为按钮命名为来自 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);
        }
    }
}

标签: javamysqlswingactionlistener

解决方案


像这样编写您的按钮侦听器:

    public class btn_listener implements ActionListener {
        private final String car_number;

        public bin_listener(String car_number) {
            this.car_number = car_number;
        }
        public void actionPerformed(ActionEvent arg0) {
            System.out.println(car_number);
        }
    }

然后在您的循环中创建 ActionListener:

    ActionListener actionListener = new btn_listener(car_number);

当然,要成为惯用的 Java,您应该使用carNumber等等BtnListener


推荐阅读