java jtable加一个值_Java-方法更改JTable中变量的值(刷新不起作用)

我有一个JTable,其中一个单元格内有一个变量.单击Button时,变量会更改,但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();

}

}

}

有人能帮助我吗?

谢谢!

解决方法:

您根本不会更改tableModel的数据,因此JTable永远不会更改是有道理的.也许您想在模型上调用setValueAt(…)来更改其单元格之一所保存的值.完成此操作后,无需在模型上调用fireXxxx(…),因为这是(并且应该)由模型本身在内部调用.

啊,我明白你做了什么.您以为通过更改var所引用的String,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();

}

});

}

}

标签:defaulttablemodel,swing,jtable,refresh,java

来源: https://codeday.me/bug/20191120/2046891.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值