jtable不显示可滚动条

时间:2015-06-17 17:31:24

标签: java swing jtable jscrollpane

下面的代码是一个表,显示从数据库中获取的数据,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();
                }

            }


        }

    });

snapshot for my application

2 个答案:

答案 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的区域似乎是固定的,并且大于屏幕中可用的区域。

检查面板的布局选择。