Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java jtable不显示可滚动条_Java_Swing_Jtable_Jscrollpane - Fatal编程技术网

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);