Java jtable不显示可滚动条
下面的代码是一个表格,它显示从数据库中获取的数据,表格不显示可滚动条,它只显示向上移动的箭头,所以我不能向下滚动,也很难设置特定列的列宽。我在互联网上做过研究,但无法解决这个问题Java jtable不显示可滚动条,java,swing,jtable,jscrollpane,Java,Swing,Jtable,Jscrollpane,下面的代码是一个表格,它显示从数据库中获取的数据,表格不显示可滚动条,它只显示向上移动的箭头,所以我不能向下滚动,也很难设置特定列的列宽。我在互联网上做过研究,但无法解决这个问题 static JTable table1 = new JTable(); static DefaultTableModel model; table1=new JTable(model); JScrollPane pane = new JScrollPane(table1); String col[]
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();
}
}
}
});
静态JTable table 1=新JTable();
静态模型;
表1=新JTable(型号);
JScrollPane=新的JScrollPane(表1);
字符串col[]={“类别”、“期限”、“应付”、“年度”};
模型=新的DefaultTableModel(col,100);
saachs.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
字符串adm=adms.getText();
连接con=null;
试一试{
Class.forName(“com.mysql.jdbc.Driver”);
}捕获(ClassNotFoundException ex){
试一试{
抛出新异常(“未找到驱动程序”);
}捕获(异常e1){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
}
String url=“jdbc:mysql://localhost/test";
试一试{
con=DriverManager.getConnection(url,“abda”,“abda”);
}捕获(SQLException e1){
e1.printStackTrace();
}如果(con!=null){
语句st=null;
结果集rs=null;
String query=“选择日期、期限、已付款、费用收据,其中adm=”+adms.getText()+”;
试一试{
st=con.createStatement();
}捕获(SQLException e1){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
试一试{
rs=st.executeQuery(查询);
}捕获(SQLException e1){
System.out.println(“未执行查询”);
e1.printStackTrace();
}
试一试{
while(rs.next()){
向量行数据=新向量();
添加(rs.getString(1));
添加(rs.getString(2));
添加(rs.getString(3));
添加(rs.getString(4));
//行++;
model.addRow(rowData);
}
表1.setModel(模型);
}捕获(SQLException e1){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
}
}
});
使用addRow(…)方法时,添加的行是101、102、103等。因此,除非滚动所有100行,否则无法查看数据
不要硬编码行数。默认值应为0。然后addRow(…)方法将向表中一次添加一行。然后根据需要显示滚动条
如果我不将组件声明为静态..我会得到一个错误
您的程序结构有问题。使用静力学并不是解决问题的方法
我建议您阅读上Swing教程的部分。
SimpleTableDemo
将向您展示如何更好地构造代码。它只是创建一个包含所有组件的面板,并将面板添加到框架中。所有变量都包含在panel类中。奇怪的是,你看不到滚动条。通过选择一行并按下键盘上的向下箭头,可以在表格中向下导航吗?似乎JVM在GUI中绘制组件时遇到了问题。您使用的是什么Java版本
您的代码有几个问题。正如@Andrew Thompson所说,GUI组件是静态的,请先修复它
此外,从您发布的代码来看,您似乎是在表模型中添加行,而之前没有清理它
查询数据库后,将添加更多行:
model.addRow(rowData);
但是表模型已经包含构造函数添加的100个空行:
model = new DefaultTableModel(col,100);
因此,在循环添加行之前,请先按如下所示进行清理:
model.setRowCount(0);
试试这些,然后在这里更新。
字段的大小也可能影响表格的显示方式
更新:
根据您添加的screeshot,问题似乎出在包含JTable的面板上,而不是JTable本身。似乎包含JTable的面板区域是固定的,并且比屏幕上可用的区域大
检查面板的布局选择。要更快地获得更好的帮助,请发布(最小完整可验证示例)或(简短、自包含、正确示例)。
static JTable table 1=new JTable();静态模型;表1=新JTable(型号)代码>不要将GUI组件声明为静态
。不管你打算解决什么问题,static
都是错误的解决方案。顺便说一句,你之前的许多问题都没有公认的答案,但你对其中多个问题的答案回答为“感谢它奏效”。请重新审视您之前的问题并接受更多的答案!我已经接受了更多的答案…如果我不将组件声明为静态…我会收到一个错误。我被迫将其声明为静态,但如果我将组件声明为最终,则在另一部分中调用同一组件时会收到一个错误
model.setRowCount(0);