有人能告诉我,我的错误在哪里? 我正在尝试用数据填充表,但我不能,总是得到空表。 这是我的框架代码:
import java.util.*;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class Rinktis extends JFrame {
private final JScrollPane scrollPane = new JScrollPane();
private JTable table;
public Rinktis()
{
super();
setBounds(100, 100, 861, 375);
try {
jbInit();
} catch (Throwable e) {
e.printStackTrace();
}
}
Vector<Vector<String>> data1 =new Vector<Vector<String>>();
Vector<String> heading1 = new Vector<String>();
public void tab(Vector heading, Vector data)
{ System.out.println(data);
System.out.println(heading);
data1=data;
heading1=heading;
System.out.println(data1);
System.out.println(heading1);
}
private void jbInit() throws Exception {
getContentPane().setLayout(null);
getContentPane().add(scrollPane);
scrollPane.setBounds(10, 10, 825, 176);
table = new JTable(data1,heading1);
scrollPane.setViewportView(table);
}
}
以下是我从另一个框架调用它的方式:
protected void rinktisButton_1_actionPerformed(ActionEvent e)
{ Rinktis frame = new Rinktis();
frame.setVisible(true);
try {
db.getClients();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
来自db.getClients();
我致电rinktis.tab(columnHeads,v);
System.out.println
正确地为我提供了所有数据,但表格为空。
答案 0 :(得分:2)
要获得严格的答案,您需要发布SSCCE。无论如何,您似乎将错误的类型传递给JTable constructor。
你需要传递一个2d数组的对象(Object [][]
)或Vector<Vector<Object>>
而不是普通的1D Vector,与TableHeader相同
我认为这是问题所在:
table = new JTable(data1, heading1);
//data1 need to of type Object[][] or Vector<Vector<Object>>
//heading1 need to of type String[] or Vector<String>
这是tutorial。
答案 1 :(得分:2)
问题是该表不知道您更改了数据。您可以在创建表时加载数据。然后它应该显示就好了(也许先试试这个)。然后在第二步中,您应该直接使用tablemodel并在那里更改数据。无论何时这样做,您都可以通知表格进行更新。
或者,如果您已经知道标题,则可以设置标题,稍后再添加数据。这也应该有效。但是我不推荐这个。
答案 2 :(得分:2)
将标签功能更改为:
public void tab(Vector heading, Vector data)
{
table.setModel(new DefaultTableModel(data,heading) );
}