gpt4 book ai didi

java - JTable 和 DefaultTableModel 不刷新表数据

转载 作者:行者123 更新时间:2023-12-01 17:29:13 25 4
gpt4 key购买 nike

我在更新/刷新表中的数据时遇到问题。我正在使用默认表模型。这是代码,请分享您的知识和建议。此致。

*编辑 1:*原始代码有一个更新表数据的函数,但事实证明这是错误的,因为构造函数一遍又一遍地创建新的 JTable 和新的 JScrollPane。这就是为什么我创建了新的构造函数并且修复了该错误。在我实现新的构造函数后,表数据仍然没有刷新。接下来,我尝试调试构造函数收到的其他类(passDatatoTable 类)的数据。在我使用函数 setValueAt() 然后使用 System.out.println(getValueAt(i,1)) 后,输出为空。就是这样首先是创建 gui 的主类:

import javax.swing.*;
public class Glavni {
public static void main(String[] args) {
// TODO Auto-generated method stub
SwingUtilities.invokeLater(new Runnable() {
public void run() {
gui Scanner = new gui();
Scanner.setVisible(true);
}
});
}

}

第二个是向 gui 发送数据的类

public class passDatatoTable {
public void passData(){
String str1,str2,str3,str4;
for (int i =0;i<=10;i++){
str1="Column 1 of row: "+i;
str2="Column 2 of row: "+i;
str3="Column 3 of row: "+i;
str4="Column 4 of row: "+i;
gui SendStringsToGUI = new gui(str1, str2, str3, str4);

}
}
}

这是 gui 类。 “添加数据”按钮用于填充数据。这是代码:

public class gui extends JFrame implements ActionListener {
private static final long serialVersionUID = 1L;
String[][] data = new String[100][4];

String[] columnNames = new String[]{
"IP", "PC_NAME", "ttl", "db"
};
DefaultTableModel model = new DefaultTableModel(data,columnNames);


JTable table = new JTable(model);
JScrollPane scrollPane = new JScrollPane(table);
int i=0;
public gui(String IP, String PC_NAME, String ttl, String gw) {
//Used this constructor to avoid creating new gui in other classes
model.setValueAt(IP, i, 0);
model.setValueAt(PC_NAME, i, 1);
model.setValueAt(ttl, i, 2);
model.setValueAt(gw, i, 3);
i++;
model.fireTableDataChanged();
table.repaint();
scrollPane.repaint();

}
gui(){

JButton addData= new JButton("Add Data");
JButton next = new JButton("next");
JButton prev = new JButton("prev");
addData.addActionListener(this);
next.addActionListener(this);
prev.addActionListener(this);
JPanel panel = new JPanel(new BorderLayout());
JPanel buttonPanel = new JPanel();
buttonPanel.add(addData);
buttonPanel.add(prev);
buttonPanel.add(next);
panel.add(buttonPanel, BorderLayout.SOUTH);
panel.add(table.getTableHeader(), BorderLayout.PAGE_START);
panel.add(scrollPane, BorderLayout.CENTER);
getContentPane().add(panel);
}

这是 ActionListener。 next 和 prev 按钮用于分页,“Add Data”按钮用于创建“passDatatoTable”类的变量,该变量用于填充表的数据

这里是代码:

public void actionPerformed(ActionEvent e) {
if ("Add Data".equals(e.getActionCommand())){

passDatatoTable passSomeData = new passDatatoTable();
passSomeData.passData();
}
if ("next".equals(e.getActionCommand())) {
Rectangle rect = scrollPane.getVisibleRect();
JScrollBar bar = scrollPane.getVerticalScrollBar();
int blockIncr = scrollPane.getViewport().getViewRect().height;
bar.setValue(bar.getValue() + blockIncr);
scrollPane.scrollRectToVisible(rect);
}
if ("prev".equals(e.getActionCommand())) {
Rectangle rect = scrollPane.getVisibleRect();
JScrollBar bar = scrollPane.getVerticalScrollBar();
int blockIncr = scrollPane.getViewport().getViewRect().height;
bar.setValue(bar.getValue() - blockIncr);
scrollPane.scrollRectToVisible(rect);
}

}

最佳答案

您似乎正在为新的 Gui 对象设置表模型数据,该对象与当前显示的 Gui 没有关联,因此 JTable< 中没有出现任何内容 表格.

拥有模型更新方法将允许您根据需要更新模型数据:

public void updateModel(String IP, String PC_NAME, String ttl, String gw) {
model.setValueAt(IP, i, 0);
model.setValueAt(PC_NAME, i, 1);
model.setValueAt(ttl, i, 2);
model.setValueAt(gw, i, 3);
i++;
}

您需要将 Gui 对象的引用传递给 PassDatatoTable 对象。后一个对象在当前形式中几乎没有什么功能,因此最好将此功能引入 Gui 类中。

也无需调用:

model.fireTableDataChanged();

这会自动发生。

关于java - JTable 和 DefaultTableModel 不刷新表数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12652593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com