无法将 DefaultTableModel 设置为 JDialog 中包含的 JTable
Unable to set a DefaultTableModel to a JTable contained in a JDialog
我创建了一个包含 JTable 的 JDialog,当我尝试为其分配 DefaultTableModel 时,它给了我一个异常并且 JDialog 甚至没有出现。 java.lang.ArrayIndexOutOfBoundsException: 11
。
分配 table 模型的代码:
jTable1.setModel(new BomModel(GetBomForSetupMaterial.getPartPositionList()));
我的AbstractTableModel
class:
public class BomModel extends AbstractTableModel {
private static List<JPartPosition> partPositionList = new ArrayList<JPartPosition>();
private String[] columnNames = {"Part Header ID", "Mounting Place", "Part Number",
"Component Type", "Description", "PCB Layer ID", " Processing Type ID", "Component Quantity", "Quantity Unit ID", "Mounting Place Related Machine Group ID", "Componen Setup"};
public BomModel() {
}
public BomModel(List<JPartPosition> positionList){
this.partPositionList = positionList;
}
@Override
public int getRowCount() {
return partPositionList.size();
}
@Override
public int getColumnCount() {
return 12;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Object value = "??";
JPartPosition jpart = partPositionList.get(rowIndex);
switch (columnIndex) {
case 0:
value = jpart.getPartHeaderId();
break;
case 1:
value = jpart.getMountingPlace();
break;
case 2:
value = jpart.getPartNumber();
break;
case 3:
value = jpart.getComponentType();
break;
case 4:
value = jpart.getDescription();
break;
case 5:
value = jpart.getPcbLayerId();
break;
case 6:
value = jpart.getProcessingTypeId();
break;
case 7:
value = jpart.getComponentQuantity();
break;
case 8:
value = jpart.getQuantityUnitId();
break;
case 9:
value = jpart.getMountingPlaceRelatedMachineGroupId();
break;
case 10:
value = jpart.getComponentSetup();
break;
//do i need the ID???////////////////
}
return value;
}
public JPartPosition getMatAt(int row) {
return partPositionList.get(row);
}
@Override
public String getColumnName(int col) {
return columnNames[col];
}
}
我用来分配 table 模型的代码行工作正常,例如,如果它的 JTable 包含在 JFrame 中,但它不会在 JDialog 中工作。我需要这个 table 在 JDialog 中的原因是因为当用户在 JDialog 中选择一个值然后在主应用程序中使用时,我需要暂停主应用程序。我发布了另一个与此相关的问题,我之前曾尝试为此使用 JFrame,但这不是满足我需要的方法。我会留下 link 以供参考。
看起来您有一个大小为 11 的列名数组,但是您的 getColumnCount 方法 returns 12.
我创建了一个包含 JTable 的 JDialog,当我尝试为其分配 DefaultTableModel 时,它给了我一个异常并且 JDialog 甚至没有出现。 java.lang.ArrayIndexOutOfBoundsException: 11
。
分配 table 模型的代码:
jTable1.setModel(new BomModel(GetBomForSetupMaterial.getPartPositionList()));
我的AbstractTableModel
class:
public class BomModel extends AbstractTableModel {
private static List<JPartPosition> partPositionList = new ArrayList<JPartPosition>();
private String[] columnNames = {"Part Header ID", "Mounting Place", "Part Number",
"Component Type", "Description", "PCB Layer ID", " Processing Type ID", "Component Quantity", "Quantity Unit ID", "Mounting Place Related Machine Group ID", "Componen Setup"};
public BomModel() {
}
public BomModel(List<JPartPosition> positionList){
this.partPositionList = positionList;
}
@Override
public int getRowCount() {
return partPositionList.size();
}
@Override
public int getColumnCount() {
return 12;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Object value = "??";
JPartPosition jpart = partPositionList.get(rowIndex);
switch (columnIndex) {
case 0:
value = jpart.getPartHeaderId();
break;
case 1:
value = jpart.getMountingPlace();
break;
case 2:
value = jpart.getPartNumber();
break;
case 3:
value = jpart.getComponentType();
break;
case 4:
value = jpart.getDescription();
break;
case 5:
value = jpart.getPcbLayerId();
break;
case 6:
value = jpart.getProcessingTypeId();
break;
case 7:
value = jpart.getComponentQuantity();
break;
case 8:
value = jpart.getQuantityUnitId();
break;
case 9:
value = jpart.getMountingPlaceRelatedMachineGroupId();
break;
case 10:
value = jpart.getComponentSetup();
break;
//do i need the ID???////////////////
}
return value;
}
public JPartPosition getMatAt(int row) {
return partPositionList.get(row);
}
@Override
public String getColumnName(int col) {
return columnNames[col];
}
}
我用来分配 table 模型的代码行工作正常,例如,如果它的 JTable 包含在 JFrame 中,但它不会在 JDialog 中工作。我需要这个 table 在 JDialog 中的原因是因为当用户在 JDialog 中选择一个值然后在主应用程序中使用时,我需要暂停主应用程序。我发布了另一个与此相关的问题,我之前曾尝试为此使用 JFrame,但这不是满足我需要的方法。我会留下 link 以供参考。
看起来您有一个大小为 11 的列名数组,但是您的 getColumnCount 方法 returns 12.