是否可以在Java中创建JTable数组?

时间:2018-02-07 08:23:01

标签: java arrays swing

我想要创建的是一个包含多个具有相同模型的JTable的java页面,但这些模型的内容是不同的。 现在编程时不知道所需的jtables总数,我想创建多个表实例, 我试图创建一个DefaultTableModel数组,然后是一个Jtable数组,最后是一个JScrollPane数组。 将模型附加到表格然后将表格附加到滚动窗格中时,表格不会出现任何错误。

提前致谢!

private void showComponents() {

    lbl = new JLabel[users.size()];
    tbl = new JTable[users.size()];
    dtm = new DefaultTableModel[users.size()];
    sp = new JScrollPane[users.size()];

    for(int i =0;i<users.size();i++){
        lbl[i] = new JLabel(users.get(i));
        jPanel2.add(lbl[i]);
        dtm[i] = new DefaultTableModel(column,0){
                    @Override
                    public boolean isCellEditable(int row, int column) {
                    return false;
                    }
                };
        for(int j = 0;j<object.size();j++)
        {
            if(users.get(i).equals(object.get(j).getUser())){
                String code = object.get(j).getCompCode();
                String info = object.get(j).getInfo();
                Integer amount = object.get(j).getAmount();
                Boolean paid = object.get(j).getAmountPaid();

                Object[] data ={object.get(j).getUser(),code,info,amount,paid}; 
                System.out.println("data is :"+object.get(j).getService()+","+code+","+info+","+amount+","+paid+",::::"+object.get(j).getUser());

                dtm[i].addRow(data);
            }
        }
        tbl[i] = new JTable();
        tbl[i].setModel(dtm[i]);
        sp[i] = new JScrollPane();
        sp[i].setBackground(Color.red);
        sp[i].add(tbl[i]);
        jPanel2.add(sp[i]);
    }

    setVisible(true);        
}

这里的用户和对象是包含一些数据的两个arraylist。并且已经定义了所有其他组件,如JLabel,JPanel。

2 个答案:

答案 0 :(得分:2)

您定义了一个没有列的TableModel

dtm[i] = new DefaultTableModel(column,0)

constructor documentation状态参数的顺序相反

  

public DefaultTableModel(int rowCount,int columnCount)

所以简单地使用:

dtm[i] = new DefaultTableModel(0,column)

以下是在某些更改可用之后的方法,我只是简单地使用了一些参数并更改了传递的数据(因为您没有提供任何内容来重现此内容)。

private void showComponents(List<String> users, Object[][] object) {

    lbl = new JLabel[users.size()];
    tbl = new JTable[users.size()];
    dtm = new DefaultTableModel[users.size()];
    sp = new JScrollPane[users.size()];

    for (int i = 0; i < users.size(); i++) {
        //Label
        lbl[i] = new JLabel(users.get(i));

        //Data
        dtm[i] = new DefaultTableModel(0, 2);
        for (int j = 0; j < object.length; j++) {
            Object[] data = object[j];
            dtm[i].addRow(data);
        }

        //Table
        tbl[i] = new JTable(dtm[i]);

        //Pane
        sp[i] = new JScrollPane(tbl[i]);
        sp[i].setBackground(Color.red);

        //Add components to panel
        jPanel2.add(lbl[i]);
        jPanel2.add(sp[i]);
    }

    setVisible(true);
}

两个用户(&#34; A&#34;和#34; B&#34;)的结果(使用基本的JPanel)具有相同的数据:

enter image description here

另外,不要像以前那样将组件添加到JScrollPane,与JTable实例化或将其添加到视口中:

sp[i].getViewPort().add(tbl[i]);

来源:MadProgrammer - jScrollPane can't add component

答案 1 :(得分:0)

经过一番努力,我得到了您的代码。

我尝试了您的sp[i].getViewPort().add(tbl[i]);

并得到:对于JScrollPane类型,未定义。

我尝试过:sp[i].getViewport().add(tbl[i]);

得到了:NPE

工作时,每个JTable的大小约为400x400 px。 我指定了600x300的JFrame,只能看到 JLabel#1,JTable#1的前2/3和JLabel#2。 垂直拉伸窗口显示JTable#2。 我没有红色像素。

感谢您展示JTable数组!