下面的代码是一个表,显示从数据库中获取的数据,hte表desnot显示可滚动条,它只显示向上移动的箭头,所以我不能向下滚动,也很难设置特定的列宽columns..i在互联网上做过研究,但无法解决它
static JTable table1 = new JTable();
static DefaultTableModel model;
table1=new JTable(model);
JScrollPane pane = new JScrollPane(table1);
String col[] = {"CLASS","TERM","PAYABLE","YEAR"};
model = new DefaultTableModel(col,100);
saachs.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
String adm = adms.getText();
Connection con = null;
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException ex) {
try {
throw new Exception ("driver not found");
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
String url = "jdbc:mysql://localhost/test";
try {
con = DriverManager.getConnection(url,"abda","abda");
} catch (SQLException e1) {
e1.printStackTrace();
}if(con!=null){
Statement st = null;
ResultSet rs = null;
String query = "select date,term,paid,receipt from fees where adm = '"+adms.getText()+"'";
try {
st = con.createStatement();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
rs = st.executeQuery(query);
} catch (SQLException e1) {
System.out.println("query not executed");
e1.printStackTrace();
}
try {
while(rs.next()){
Vector<String> rowData = new Vector<>();
rowData.add(rs.getString(1));
rowData.add(rs.getString(2));
rowData.add(rs.getString(3));
rowData.add(rs.getString(4));
// row++;
model.addRow(rowData);
}
table1.setModel(model);
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
});
答案 0 :(得分:1)
model = new DefaultTableModel(col,100);
使用addRow(...)方法时,添加的行数为101,102,103等,因此除非滚动所有100行,否则无法查看数据。
不要对行数进行硬编码。默认值应为0.然后,addRow(...)方法将一次向表中添加一行。然后会根据需要显示滚动条。
如果我没有将组件声明为static..i得到错误
您的程序结构存在问题。使用静态不是修复它的方法。
我建议你阅读How to Use Table上Swing教程中的部分。 SimpleTableDemo
将向您展示如何更好地构建代码。它只是创建一个包含所有组件的面板,并将面板添加到框架中。所有变量都包含在面板类中。
答案 1 :(得分:1)
你看不到滚动条很奇怪。你可以通过选择一行并按下键盘上的箭头来向下导航吗?似乎JVM在GUI中绘制组件时遇到问题。您使用的Java版本是什么?
您的代码有几个问题。正如@Andrew Thompson所说,GUI组件是静态的,首先修复它。
此外,从您发布的代码中可以看出,您之前没有清除表格模型的行。
查询数据库后,添加更多行:
model.addRow(rowData);
但是表模型已经包含100个由构造函数添加的空行:
model = new DefaultTableModel(col,100);
因此,在添加行的循环之前,首先清理它,如下所示:
model.setRowCount(0);
尝试这些内容,然后在此处进行更新。 字段的大小也可能影响表格的显示方式。
<强>更新
通过你添加的screeshot,问题似乎是包含JTable的Panel,而不是JTable本身。 Panel中包含JTable的区域似乎是固定的,并且大于屏幕中可用的区域。
检查面板的布局选择。