如何在初始化后更改JTable?

问题描述:

对Java中的Swing开发很新颖。初始化完成后,我需要一些帮助来填充表中的某些值。如何在初始化后更改JTable?

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)并包含数组列表后续行中的元素。

+0

你为什么要创建新表,如果你想填充现有的? – Aelop

+0

你为什么要调用你的'JTable''Table'?它应该至少添加一个小写字符开始。 – Thibstars

+1

1)为了更快地获得更好的帮助,请发布[MCVE]或[简短,独立,正确的示例](http://www.sscce.org/)。 2)请学习常用的Java命名规则(命名约定 - 例如'EachWordUpperCaseClass','firstWordLowerCaseMethod()','firstWordLowerCaseAttribute',除非它是'UPPER_CASE_CONSTANT')并且一致地使用它。 3)你的一般问题的答案是“改变模型,而不是表格”。 4)除非你能解释为什么它是一件好事,否则应避免使用“静态”。 5)使表模型成为类属性并提供访问者。 6)这些点没有特定的顺序。 7)不要.. –

假设你叫你JTable“表”:

static void populateTable(ArrayList<String> list){ 
     DefaultTableModel dtm = new DefaultTableModel(); 
     dtm.addColumn("title", list.toArray()); 
     table.setModel(dtm); 
    } 
    } 

你也应该不叫table.setVisible(true);在该方法中,因为它无关填充表。

编辑:如其他人所建议的那样:最好使用DefaultTableModel的类属性。

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

这是你的类应该怎么看起来像