Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
156 views
in Technique[技术] by (71.8m points)

java - Unable to set a DefaultTableModel to a JTable contained in a JDialog

I have created a JDialog that contains a JTable, when I try to assign a DefaultTableModel to it, it gives me an exception and the JDialog does not even appear. java.lang.ArrayIndexOutOfBoundsException: 11.

Code to assign the table model:

jTable1.setModel(new BomModel(GetBomForSetupMaterial.getPartPositionList()));

My 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];
    }

}

The line of code I use to assign the table model works fine for example if its a JTable contained in a JFrame, but it will not work in a JDialog. The reason I need this table to be in a JDialog is because I need to main app to be halted while the user selects a value in the JDialog to then be used in the main app. I posted another question relating to this, I was previously trying to use a JFrame for this but that was not the way to go for what I need. I'll leave the link for reference. Continue code execution after new JFrame is created and then closed

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

It looks like you have an array of column names with size of 11, but your getColumnCount method returns 12.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...