给JButton注册了事件监听器,但是按下后没有反应,下面是代码部分。代码无错误。
下面只有关于按钮部分的代码
我写了一个生成相关文件的图形界面,总代码较长,放到了后面,真心希望大佬可以给出解答!!!
是不是相关的逻辑层面出了错误呢?大佬给些相关方面的提示也可以,谢谢啦!
真的想了好久好久,始终不知道错误出在哪里。
按钮生成函数
public static JButton[] createButton (int x) {
JButton[] jb = new JButton[x];
//将生成的button放入JButton型数组
for(int k = 0; k < x; k++) {
JButton button = new JButton(getAllTableNames(ProjectConfig.DATABASE_NAME).get(k));
Dimension preferredSize = new Dimension(280, (500-50)/(getAllTableNames(ProjectConfig.DATABASE_NAME).size()+1));
button.setPreferredSize(preferredSize);
jb[k] = button;
}
return jb;
}
按钮注册事件监听,并且增加到界面的函数
//添加button
list = getAllTableNames(ProjectConfig.DATABASE_NAME);
number = list.size();
for ( int i = 0; i < number; i++){
int j = i;
//增添按钮
gui.add(createButton(number)[j]);
//实现按钮监听
createButton(number)[j].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("hello");
}
});
System.out.println("hello!!!!");
}
这是总代码:
package com.springjdbc.demo;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
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.JLabel;
import javax.swing.JPanel;
public class Gui extends JFrame{
/**
*
*/
private static final long serialVersionUID = -3735744874051620286L;
public static List<String> list; //存放获取的数据表名
public static int number; //数据表的数量
JLabel label = new JLabel("数据表列表");
public Gui (String title) {
super(title);
this.setLayout( new FlowLayout( FlowLayout.CENTER));//布局模式
this.add(label);
}
public static void main(String[] args) throws SQLException {
List<String> tables = getAllTableNames(ProjectConfig.DATABASE_NAME);
System.out.println(tables);
//设置窗口属性
Gui gui = new Gui("数据库代码生成");
gui.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE);//点击关闭图标是关闭窗口
gui.setSize(350, 550);//设置窗口大小
gui.setVisible(true);//设置窗口可见w
gui.setLocation(200, 100);//设置左上角坐标
//添加button
list = getAllTableNames(ProjectConfig.DATABASE_NAME);
number = list.size();
for ( int i = 0; i < number; i++){
int j = i;
//增添按钮
gui.add(createButton(number)[j]);
//实现按钮监听
createButton(number)[j].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("hello");
}
});
System.out.println("hello!!!!");
}
}
public static JButton[] createButton (int x) {
JButton[] jb = new JButton[x];
//将生成的button放入JButton型数组
for(int k = 0; k < x; k++) {
JButton button = new JButton(getAllTableNames(ProjectConfig.DATABASE_NAME).get(k));
Dimension preferredSize = new Dimension(280, (500-50)/(getAllTableNames(ProjectConfig.DATABASE_NAME).size()+1));
button.setPreferredSize(preferredSize);
jb[k] = button;
}
return jb;
}
//保证只是注册一次驱动
static{
try {
Class.forName(ProjectConfig.JDBC_DIVER_CLASS_NAME);
} catch (ClassNotFoundException e) {
throw new ExceptionInInitializerError(e);
}
}
/**
* 获取连接
* @return
* @throws SQLException
*/
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(ProjectConfig.JDBC_URL, ProjectConfig.JDBC_USERNAME, ProjectConfig.JDBC_PASSWORD);
}
public static List<String> getAllTableNames( String databasename) {
List<String> tableNames = new ArrayList<String>();
Connection conn = null;
try {
conn = getConnection();
DatabaseMetaData dbmd = conn.getMetaData();
// 表名列表
ResultSet rest = dbmd.getTables(databasename, null, null, new String[] { "TABLE" });
// 输出 table_name
while (rest.next()) {
tableNames.add(rest.getString("TABLE_NAME"));
}
} catch (SQLException e) {
e.printStackTrace();
}
return tableNames;
}
}