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

Adding a JButton into a JTable which uses abstract table model

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

在这里,我为每个包含文本和布尔变量的记录创建了一个对象数组,以具有 table 渲染复选框。然后将那些对象数组保存到一个 ArrayList 中

这是我创建 table 数据的代码。

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;

这是我的 table 模型

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

TableModel 的类型无关紧要。如果您想 "show" JTable 上的按钮,您可以为能够根据它代表的列的值。

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

仔细看看Using Custom Renderers, Using Other Editors and How to Use Tables

看看Table Button Column

此 class 实现了使按钮正常工作所需的 render/editor。您还提供 Action 以在按下按钮时调用。