如何在初始化后更改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)并包含数组列表后续行中的元素。
答
假设你叫你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());
}
}
这是你的类应该怎么看起来像
答
您应该使用fireTableDataChanged方法
你为什么要创建新表,如果你想填充现有的? – Aelop
你为什么要调用你的'JTable''Table'?它应该至少添加一个小写字符开始。 – Thibstars
1)为了更快地获得更好的帮助,请发布[MCVE]或[简短,独立,正确的示例](http://www.sscce.org/)。 2)请学习常用的Java命名规则(命名约定 - 例如'EachWordUpperCaseClass','firstWordLowerCaseMethod()','firstWordLowerCaseAttribute',除非它是'UPPER_CASE_CONSTANT')并且一致地使用它。 3)你的一般问题的答案是“改变模型,而不是表格”。 4)除非你能解释为什么它是一件好事,否则应避免使用“静态”。 5)使表模型成为类属性并提供访问者。 6)这些点没有特定的顺序。 7)不要.. –