gpt4 book ai didi

Java Swing : Vector used in Default Table Model fails to addElement() added through a for loop

转载 作者:行者123 更新时间:2023-11-30 02:04:45 26 4
gpt4 key购买 nike

此示例中的两个 Jtable 显示了我面临的挑战。简单地说,一个表是主表,第二个表取决于主表数据。主表包含第 3 列为 boolean 值的数据,第二个表的目的只是显示第 3 列为 true 的所有数据(所有男性的姓名)。换句话说,主表第 3 列中所有错误的数据都不会显示。问题是,当我运行代码时,第二个表中仅显示一个元素,而“Boolean=true”的其他数据被忽略,如下所示。 enter image description here

我的代码可能有什么问题,无法在第二个表上显示所有 boolean 真实数据。注意:我还尝试在循环中使用 DefaultTableModel addRow() 方法,但也无法显示来自的所有真实数据主表第 3 列。

public class ZoomTable extends JFrame{

JPanel panel;
Object [] masterColumns = new Object []{"Name","Age","Male"};
Object [][] masterData = new Object [][]{
{"Simon",10,new Boolean(true)},
{"Jane",10,new Boolean(false)},
{"Hellen",10,new Boolean(false)},
{"Amos",10,new Boolean(true)},
{"Brenda",10,new Boolean(false)},
{"Dennis",10,new Boolean(true)},
{"Mary",10,new Boolean(false)},
};
MasterTableModel mtm = new MasterTableModel(masterData,masterColumns);
Vector<Vector> maleListData = new Vector<Vector>();
Vector maleList = new Vector();
public static void main(String[] args) {
ZoomTable zoom = new ZoomTable();
zoom.init();
zoom.setVisible(true);
zoom.setSize(new Dimension(600,800));
zoom.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

void init(){
panel = new JPanel();
panel.setLayout(new BorderLayout());
JTable masterTable = new JTable(masterData,masterColumns);
JScrollPane spMaster = new JScrollPane();
spMaster.setViewportView(masterTable);
panel.add(spMaster,"North");

Vector <String> tinyColumns = new Vector <String>();
tinyColumns.addElement("NAMES OF MALES");

DefaultTableModel dtm = new DefaultTableModel(maleListVector(),tinyColumns);
JTable tinyTable = new JTable(dtm);
JScrollPane spTiny = new JScrollPane();
spTiny.setViewportView(tinyTable);
panel.add(spTiny,"Center");
add(panel);
pack();
}

public Vector maleListVector(){
for(int k = 0;k < mtm.getRowCount();k++){

if(mtm.getValueAt(k,2).equals(true)){
String maleName = mtm.getValueAt(k,0).toString();
maleList.addElement(maleName);
System.out.println(maleName+" is Male");
}
else if(mtm.getValueAt(k,2).equals(false)){
String femaleName = mtm.getValueAt(k,0).toString();
System.out.println(femaleName+" is Female");
}


}
maleListData.add(maleList);
return maleListData;}
}

class MasterTableModel extends AbstractTableModel{
Object [][] data;
Object [] cols;

MasterTableModel(Object[][] masterData, Object[] masterColumns) {
data = masterData;
cols = masterColumns;
}

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

@Override
public int getColumnCount() {
return cols.length;
}

@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return data[rowIndex][columnIndex];
}

}

最佳答案

DefaultTableModel 的数据是 vector 的 vector 。

您只能将一个 vector 添加到“maleListData”中,因此这意味着您有一行包含多列数据。

这很容易验证。只需将您的代码更改为:

tinyColumns.addElement("NAMES OF MALES");
tinyColumns.addElement("2");

您将看到另一列数据。

因此,问题的解决方案是为您找到的每个男性项目向 vector 添加一行新数据:

//maleList.addElement(maleName);
Vector row = new Vector(1);
row.add(maleName);
maleListData.addElement( row );

...

//maleListData.add(maleList);

关于Java Swing : Vector used in Default Table Model fails to addElement() added through a for loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51686339/

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