将JButton添加到使用抽象表模型的JTable中

时间:2015-03-31 23:45:48

标签: java swing jtable jbutton cellrenderer

我正在尝试添加一个JButton作为我创建的表的第一列。我做了一个研究,找不到任何使用抽象表模型的表的解决方案。

在这里,我为每个记录创建一个对象数组,该记录具有文本和布尔变量以使表格呈现复选框。然后将这些对象数组保存到ArrayList中

这是我创建表格数据的代码。

public ArrayList<Object[]> setTableData(){

        /*
        * ItemInfo fields
        **********************
        * line[0] - ReferenceNo
        * line[1] - Quantity
        * line[2] - ItemNameDescriptionSKU
        * line[3] - Cube
        */

        //Setting the data for the table
        ArrayList<Object[]> itemList = new ArrayList<>();
        for (int i=0; i<this.itemInfo.size();i++){
            Object[] tempArray = new Object[7];
            tempArray[0] = this.itemInfo.get(i)[1]; //Quantity
            tempArray[1] = this.itemInfo.get(i)[2].toUpperCase(); //Item description
            tempArray[2] = this.itemInfo.get(i)[3]; //Cube
            //This adds charges if the payment type is COD
            //To not to write the charge amount for every row
            //checks the COD type only at the first record of items
            if (i==0 && this.invoice[8].equals("COD"))
                tempArray[3] = this.invoice[22]; //Charges if the invoice type is COD, null otherwise
            else 
                tempArray[3] = " ";

            tempArray[4] = new Boolean (false); //Loaded
            tempArray[5] = new Boolean (false); //Delivered (Will be ignored if pickup)

            itemList.add(tempArray);
        }
        return itemList;

这是我的桌子型号

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

public class TicketTableModel extends AbstractTableModel {

    private ArrayList<Object[]> data;
    private boolean isDelivery;
    private String[] columns;


    public TicketTableModel(ArrayList<Object[]> itemInfo, boolean isDelivery){
        super();
        this.data = itemInfo;
        this.isDelivery = isDelivery;
    }
    @Override
    public String getColumnName(int i) {

        return this.columns[i];
    }
    public void setColumns ( String[] columns1 ){
        this.columns = columns1;
    }

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

    @Override
    public int getColumnCount() {
        return columns.length;
    }
    @Override
    public Class getColumnClass(int c) {
        return getValueAt(0, c).getClass();
    }

    @Override
    public boolean isCellEditable(int row, int col) {
        if (col < 3)
            return false;
        else 
            return true;
    }

    @Override
    public void setValueAt(Object value, int row, int col) {
        data.get(row)[col] = value;
        fireTableCellUpdated(row, col);
    }
    @Override
    public Object getValueAt(int row, int col) {

        return this.data.get(row)[col];
    }

2 个答案:

答案 0 :(得分:2)

TableModel的类型无关紧要。如果你想&#34;显示&#34; JTable上的按钮,您为列提供TableCellRenderer(可能还有TableCellEditor),该列能够根据其所代表的列的值呈现按钮。

这意味着您的TableModel需要支持代表该按钮的模型中的列。

仔细查看Using Custom RenderersUsing Other EditorsHow to Use Tables

答案 1 :(得分:2)

看看Table Button Column

此类实现使按钮起作用所需的渲染/编辑器。您还可以在按下按钮时调用Action