gpt4 book ai didi

java - JTable 行中的重复值

转载 作者:搜寻专家 更新时间:2023-10-30 21:06:30 25 4
gpt4 key购买 nike

我有一个用自定义 DataModel 填充的 JTable(粘贴在下面),当我调用 populate() 方法时,它 似乎用重复数据填充表 - 每行一遍又一遍地填充相同的值。然而,仔细检查(通过简单地打印“数据”字段),数据模型没有错误——它以我期望的格式保存正确的数据。给了什么?

import java.util.ArrayList;    
import javax.swing.table.AbstractTableModel;

@SuppressWarnings("serial") // we don't expect this app to ever use serialized classes. EVER.
public class CollectionDataModel extends AbstractTableModel {
private ArrayList<ArrayList<String>> data;

public CollectionDataModel() {
data = new ArrayList<ArrayList<String>>();
}

@Override
public int getColumnCount() {
if(data.isEmpty()) return 0;
return data.get(0).size();
}

@Override
public int getRowCount() {
return data.size();
}

@Override
public Object getValueAt(int rowIndex, int columnIndex) {
if(rowIndex > getRowCount()) return null;
if(columnIndex > getColumnCount()) return null;
return data.get(rowIndex).get(columnIndex);
}

public void populate(Collection c) {
data.clear();
for(Item i : c.getItems()) {
ArrayList<String> row = new ArrayList<String>();
for(Property p : i.getProperties().values()) {
row.add(p.toString());
}
data.add(row);
}
fireTableDataChanged();
}

}

最佳答案

这是一个可能会有所帮助的完整示例。由于示例 Map 是不可修改的,我建议您引用@mKorbel 的 example关于如何覆盖 isCellEditable()setValueAt()

import java.awt.EventQueue;
import java.awt.GridLayout;
import java.util.Map;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;

/** @see https://stackoverflow.com/questions/9132987 */
public class EnvTableTest extends JPanel {

public EnvTableTest() {
this.setLayout(new GridLayout());
this.add(new JScrollPane(new JTable(new EnvDataModel())));
}

private static class EnvDataModel extends AbstractTableModel {

private Map<String, String> data = System.getenv();
private String[] keys;

public EnvDataModel() {
keys = data.keySet().toArray(new String[data.size()]);
}

@Override
public String getColumnName(int col) {
if (col == 0) {
return "Key";
} else {
return "Value";
}
}

@Override
public int getColumnCount() {
return 2;
}

@Override
public int getRowCount() {
return data.size();
}

@Override
public Object getValueAt(int row, int col) {
if (col == 0) {
return keys[row];
} else {
return data.get(keys[row]);
}
}
}

private void display() {
JFrame f = new JFrame("EnvTableTest");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(this);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {

@Override
public void run() {
new EnvTableTest().display();
}
});
}
}

关于java - JTable 行中的重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9132987/

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