Java - 方法更改 JTable 中变量的值(刷新不起作用)
Posted
技术标签:
【中文标题】Java - 方法更改 JTable 中变量的值(刷新不起作用)【英文标题】:Java - Method changes value of variable in JTable (refresh not working) 【发布时间】:2015-03-20 16:09:12 【问题描述】:我有一个 JTable,其中一个单元格中有一个变量。单击按钮时,变量会发生变化,但 JTable 中没有任何变化。 这是我的简单示例代码:
public class Test extends JPanel
static String var = "One";
Object rowData[][] = var, "Two", "Three" ,
"Four", "Five", "Six" ;
Object columnNames[] = "Column One", "Column Two", "Column Three" ;
static JTable table;
static DefaultTableModel tableModel;
JButton button = new JButton("Refresh");
public Test()
tableModel = new DefaultTableModel(rowData, columnNames);
table = new JTable(tableModel);
add(table);
button.addActionListener(new Action());
add(button);
private static class Action implements ActionListener
@Override
public void actionPerformed(ActionEvent e)
var = "ONE";
System.out.println(var);
String[] data = "ciao";
tableModel.fireTableStructureChanged();
有人可以帮帮我吗? 谢谢!
【问题讨论】:
【参考方案1】:您根本不会更改 tableModel 的数据,因此 JTable 永远不会更改是有道理的。也许您想在模型上调用setValueAt(...)
来更改其中一个单元格所持有的值。完成此操作后,无需在模型上调用 fireXxxx(...)
,因为这是(并且应该)由模型本身在内部调用。
啊,我明白你做了什么。您认为通过更改 var
引用的字符串,JTable 的数据会神奇地改变,但这是神奇的想法,因为您所做的只是更改 var
变量引用的对象,而您绝对拥有对它之前引用的且在 JTable 中显示的 String 对象没有影响。这个问题涉及Java OOP 模型的一个核心概念,即对象和引用变量之间的区别。更改变量引用对其引用的对象没有影响。再次在您的模型上调用setValueAt(...)
,您的问题就解决了。
例如:
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
public class Test extends JPanel
static String var = "One";
Object rowData[][] = var, "Two", "Three" , "Four", "Five", "Six" ;
Object columnNames[] = "Column One", "Column Two", "Column Three" ;
JTable table;
DefaultTableModel tableModel;
JButton button = new JButton("Refresh");
public Test()
tableModel = new DefaultTableModel(rowData, columnNames);
table = new JTable(tableModel);
add(table);
button.addActionListener(new Action());
add(button);
private class Action implements ActionListener
@Override
public void actionPerformed(ActionEvent e)
String var2 = "ONE";
System.out.println(var2);
// String[] data = "ciao" ;
// tableModel.fireTableStructureChanged();
tableModel.setValueAt(var2, 0, 0);
private static void createAndShowGui()
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new Test());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
public static void main(String[] args)
SwingUtilities.invokeLater(new Runnable()
public void run()
createAndShowGui();
);
【讨论】:
以上是关于Java - 方法更改 JTable 中变量的值(刷新不起作用)的主要内容,如果未能解决你的问题,请参考以下文章
JAVA中怎么把list或map里的值动态添加至JTable