我想要创建的是一个包含多个具有相同模型的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。
答案 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)具有相同的数据:
另外,不要像以前那样将组件添加到JScrollPane,与JTable实例化或将其添加到视口中:
sp[i].getViewPort().add(tbl[i]);
答案 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数组!