我对Java中的Swing开发很新。在初始化完成后,我需要一些帮助,用一些值填充一个表。
someClass extends JPanel{
private JLabel something;
static private JTable Table;
private JPanel temp;
someClass(){
setLayout(new BorderLayout());
selectSong = new JLabel("some text");
temp = new JPanel();
temp.setLayout(new FlowLayout());
temp.add(something);
Table = new JTable();
//Table.setVisible(false);
add(temp, BorderLayout.NORTH);
add(new JScrollPane(Table), BorderLayout.CENTER);
}
static void populateTable(ArrayList<String> list){
DefaultTableModel dtm = new DefaultTableModel();
dtm.addColumn("title", list.toArray());
Table = new JTable(dtm);
Table.setVisible(true);
new someClass().add(new JScrollPane(Table), BorderLayout.CENTER);
}
}
这个名为someClass的类是JPanel的子类。我正在使用此对象并将其附加到主框架(此处未显示)。根据这个,最初用空表创建一个GUI表单,在完成一些操作后,我调用populateTable函数,我希望这个更改表的值,使其有一列(名为title)并包含arraylist后续行中的元素。
答案 0 :(得分:2)
假设您调用了JTable
'表':
static void populateTable(ArrayList<String> list){
DefaultTableModel dtm = new DefaultTableModel();
dtm.addColumn("title", list.toArray());
table.setModel(dtm);
}
}
您也不应该在该方法中调用table.setVisible(true);
,因为它与填充表格无关。
修改:最好使用DefaultTableModel
的类属性。
答案 1 :(得分:1)
someClass extends JPanel{
private JLabel something;
static private JTable Table;
private JPanel temp;
private DefaultTableModel dtm;
someClass(){
setLayout(new BorderLayout());
selectSong = new JLabel("some text");
temp = new JPanel();
temp.setLayout(new FlowLayout());
temp.add(something);
dtm= new DefaultTableModel();
Table = new JTable(dtm);
add(temp, BorderLayout.NORTH);
add(new JScrollPane(Table), BorderLayout.CENTER);
}
static void populateTable(ArrayList<String> list){
dtm.addColumn("title", list.toArray());
}
}
这就是你的课程应该是这样的
答案 2 :(得分:0)
您应该使用fireTableDataChanged方法