为什么JTable表单和里面的数据都显示不出来 本帖最后由 aa84025907 于 2012-09-01 22:17:42 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你 StudentManger都未extends JFrame这里:public StudentManger() {应该改为:class StudentManger() extends JFrame {吧? panel.add(sTable);JScrollPane scroll = new JScrollPane(sTable);上面,将panel.add(sTable);删了,JTable加在Jscrollpane上很完美的 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); }//应该是OK了,我这边测试是OK,有问题再留言吧。 Process的Runtime.getRuntime().exec执行linux,cd命令问题 将一个盘下的所有. java文件的文件名写入另一个文件出现空指针异常! 【高分求解】诡异问题:JComboBox可以下拉,但没有下拉箭头 Date 实例化 new Date("Sat Dec 30 17:14:42 CST 1899") 关于价格设为float型的问题,请帮帮忙 在编写servlet时,应该使用哪些集合? 如何使得按钮闪烁? drawline画的线用xor模式擦不掉啊!总有一些小点点在上面 小错误 关于jbuilder的问题? Android中 进程启动问题 小女问个技术问题啊~
public StudentManger() {应该改为:
class StudentManger() extends JFrame {
吧?
JScrollPane scroll = new JScrollPane(sTable);上面,将panel.add(sTable);删了,
JTable加在Jscrollpane上很完美的
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()) { // 找出表中的记录数赋给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);
contentPane.add(scroll,BorderLayout.CENTER);
}
//应该是OK了,我这边测试是OK,有问题再留言吧。