为什么JTable表单和里面的数据都显示不出来
[align=center][/align][code=Java][/code]public class StudentManger extends JFrame {
private JPanel contentPane;
private JTable table;
private JTextField studNo;
private JTextField studName;
private JTextField studAge;
private JTextField studSex;
private JTextField studClass;
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
Object[][] playerInfo;
private JPanel panel;
private String[] columnNames;
private JTable table_1;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
StudentManger frame = new StudentManger();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public StudentManger() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 613, 468);
this.connDB();
System.out.println("数据库连接成功");
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JLabel lblNewLabel = new JLabel("学号:");
lblNewLabel.setBounds(10, 10, 57, 18);
contentPane.add(lblNewLabel);
studNo = new JTextField();
studNo.setBounds(50, 9, 106, 21);
contentPane.add(studNo);
studNo.setColumns(10);
JLabel lblNewLabel_1 = new JLabel("姓名:");
lblNewLabel_1.setBounds(178, 12, 45, 15);
contentPane.add(lblNewLabel_1);
studName = new JTextField();
studName.setBounds(233, 9, 106, 21);
contentPane.add(studName);
studName.setColumns(10);
JLabel label = new JLabel("性别:");
label.setBounds(366, 12, 45, 15);
contentPane.add(label);
studAge = new JTextField();
studAge.setBounds(421, 9, 106, 21);
contentPane.add(studAge);
studAge.setColumns(10);
JLabel lblNewLabel_2 = new JLabel("年龄:");
lblNewLabel_2.setBounds(10, 38, 57, 15);
contentPane.add(lblNewLabel_2);
studSex = new JTextField();
studSex.setBounds(50, 38, 106, 21);
contentPane.add(studSex);
studSex.setColumns(10);
JLabel lblNewLabel_3 = new JLabel("班级:");
lblNewLabel_3.setBounds(178, 37, 54, 15);
contentPane.add(lblNewLabel_3);
studClass = new JTextField();
studClass.setBounds(233, 40, 106, 21);
contentPane.add(studClass);
studClass.setColumns(10);
JButton btnAdd = new JButton("增加");
btnAdd.setBounds(22, 80, 93, 32);
contentPane.add(btnAdd);
JButton btnDelete = new JButton("删除");
btnDelete.setBounds(137, 80, 93, 32);
contentPane.add(btnDelete);
JButton btnUpdate = new JButton("修改");
btnUpdate.setBounds(252, 80, 93, 32);
contentPane.add(btnUpdate);
JButton btnSelete = new JButton("查询");
btnSelete.setBounds(367, 80, 93, 32);
contentPane.add(btnSelete);
JButton btnShow = new JButton("显示");
btnShow.setBounds(482, 80, 93, 32);
contentPane.add(btnShow);
}
public void display() {// 显示所有学生的基本信息
int i = 0;
int j = 0;
List al = new ArrayList();
try {
rs = stmt.executeQuery("select * from studInf");
while (rs.next()) { // 找出表中的记录数赋给i
al.add(rs.getString("studNo"));
al.add(rs.getString("studName"));
al.add(rs.getString("studAge"));
al.add(rs.getInt("studSex"));
al.add(rs.getString("studClass"));
i++;
}
} catch (SQLException e) {
e.printStackTrace();
}
playerInfo = new Object[i][5];
columnNames = new String[] { "学号", "姓名", "年龄", "性别", "班级" };
try {
rs = stmt.executeQuery("select * from studInf order by studNo");
while (rs.next()) {
playerInfo[j][0] = rs.getString("studNo");
playerInfo[j][1] = rs.getString("studName");
playerInfo[j][2] = rs.getInt("studAge");
playerInfo[j][3] = rs.getString("studSex");
playerInfo[j][4] = rs.getString("studClass");
j++;
}
} catch (SQLException e) {
e.printStackTrace();
}
JTable sTable = new JTable(playerInfo, columnNames);// 创建网格
//sTable.setBounds(0, 122, 597, 308);
panel.add(sTable);
JScrollPane scroll = new JScrollPane(sTable);
getContentPane().add(scroll);
}这是最关键的一部分代码,而且数据库的连接绝对没有错,数据库中也有数据~但是表单就是不能显示,
[解决办法]
1、你都没有哪里调用dispaly();
2、这样布局是不能显示的
把代码做了点修改,你仔细观察一下,功能是能实现的。
import java.awt.*; import javax.swing.*; import java.awt.event.*;import java.sql.*;import java.util.*;import java.util.List;public class StudentManger extends JFrame { private JPanel contentPane=(JPanel)this.getContentPane(); JPanel jpn=new JPanel(); JPanel jps=new JPanel(); private JTable table; private JTextField studNo; private JTextField studName; private JTextField studAge; private JTextField studSex; private JTextField studClass; Connection con = null; Statement stmt = null; ResultSet rs = null; Object[][] playerInfo; private JPanel panel; private String[] columnNames; private JTable table_1; int i=0,j=0; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { StudentManger frame = new StudentManger(); Dimension screen=Toolkit.getDefaultToolkit().getScreenSize();//得到屏幕的大小 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize = frame.getSize(); if (frameSize.height > screenSize.height) { frameSize.height = screenSize.height; } if (frameSize.width > screenSize.width) { frameSize.width = screenSize.width; } frame.setLocation(0,0); frame.setSize((int)screen.getWidth(),(int)screen.getHeight()-25); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public StudentManger() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 613, 468); this.connDB(); System.out.println("数据库连接成功"); //contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); contentPane.setLayout(new BorderLayout()); JLabel lblNewLabel = new JLabel("学号:"); lblNewLabel.setBounds(10, 10, 57, 18); jpn.add(lblNewLabel); studNo = new JTextField(); studNo.setBounds(50, 9, 106, 21); jpn.add(studNo); studNo.setColumns(10); JLabel lblNewLabel_1 = new JLabel("姓名:"); lblNewLabel_1.setBounds(178, 12, 45, 15); jpn.add(lblNewLabel_1); studName = new JTextField(); studName.setBounds(233, 9, 106, 21); jpn.add(studName); studName.setColumns(10); JLabel label = new JLabel("性别:"); label.setBounds(366, 12, 45, 15); jpn.add(label); studAge = new JTextField(); studAge.setBounds(421, 9, 106, 21); jpn.add(studAge); studAge.setColumns(10); JLabel lblNewLabel_2 = new JLabel("年龄:"); lblNewLabel_2.setBounds(10, 38, 57, 15); jpn.add(lblNewLabel_2); studSex = new JTextField(); studSex.setBounds(50, 38, 106, 21); jpn.add(studSex); studSex.setColumns(10); JLabel lblNewLabel_3 = new JLabel("班级:"); lblNewLabel_3.setBounds(178, 37, 54, 15); jpn.add(lblNewLabel_3); studClass = new JTextField(); studClass.setBounds(233, 40, 106, 21); jpn.add(studClass); studClass.setColumns(10); JButton btnAdd = new JButton("增加"); btnAdd.setBounds(22, 80, 93, 32); jpn.add(btnAdd); JButton btnDelete = new JButton("删除"); btnDelete.setBounds(137, 80, 93, 32); jps.add(btnDelete); JButton btnUpdate = new JButton("修改"); btnUpdate.setBounds(252, 80, 93, 32); jps.add(btnUpdate); JButton btnSelete = new JButton("查询"); btnSelete.setBounds(367, 80, 93, 32); jps.add(btnSelete); btnSelete.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { display(); contentPane.revalidate(); } } ); JButton btnShow = new JButton("显示"); btnShow.setBounds(482, 80, 93, 32); jps.add(btnShow); btnShow.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { display(); contentPane.revalidate(); } } ); contentPane.add(jpn,BorderLayout.NORTH); contentPane.add(jps,BorderLayout.SOUTH); //display();如果一开始就显示就直接调用。 } /*这个是我测试的,我调用自己的数据库,其实有些地方可以优化的。 public void display() {// 显示所有学生的基本信息 int i=0,j=0; List al = new ArrayList(); Connection conn = DBConnection.getConnection(); try { Statement stmt=conn.createStatement(); ResultSet rs = stmt.executeQuery("select * from messageinfo"); while(rs.next()) { i++; } ResultSet rss=stmt.executeQuery("select * from messageinfo order by nid"); columnNames = new String[] { "学号", "姓名", "年龄", "性别", "班级" }; playerInfo = new Object[i][columnNames.length]; while (rss.next()) { playerInfo[j][0] = rss.getInt("ncod"); playerInfo[j][1] = rss.getString("ntype"); playerInfo[j][2] = rss.getString("nctime"); playerInfo[j][3] = rss.getString("netime"); playerInfo[j][4] = rss.getString("medtime"); j++; } } catch (SQLException e) { e.printStackTrace(); } JTable sTable = new JTable(playerInfo, columnNames);// 创建网格 //sTable.setBounds(0, 122, 597, 308); //panel.add(sTable); JScrollPane scroll = new JScrollPane(sTable); contentPane.add(scroll,BorderLayout.CENTER); }*/ //你的dispaly(), public void display() {// 显示所有学生的基本信息int i = 0;int j = 0;List al = new ArrayList();try {rs = stmt.executeQuery("select * from studInf");while (rs.next()) { // 找出表中的记录数赋给ial.add(rs.getString("studNo"));al.add(rs.getString("studName"));al.add(rs.getString("studAge"));al.add(rs.getInt("studSex"));al.add(rs.getString("studClass"));i++;//这里可以优化}} catch (SQLException e) {e.printStackTrace();}playerInfo = new Object[i][5];columnNames = new String[] { "学号", "姓名", "年龄", "性别", "班级" };try {rs = stmt.executeQuery("select * from studInf order by studNo");while (rs.next()) {playerInfo[j][0] = rs.getString("studNo");playerInfo[j][1] = rs.getString("studName");playerInfo[j][2] = rs.getInt("studAge");playerInfo[j][3] = rs.getString("studSex");playerInfo[j][4] = rs.getString("studClass");j++;}} catch (SQLException e) {e.printStackTrace();}JTable sTable = new JTable(playerInfo, columnNames);// 创建网格//sTable.setBounds(0, 122, 597, 308);//panel.add(sTable);JScrollPane scroll = new JScrollPane(sTable);contentPane.add(scroll,BorderLayout.CENTER); }