0

作成したテーブルの最初の列として 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];
    }
4

2 に答える 2

2

Table Button Columnを見てください。

このクラスは、ボタンを機能させるために必要なレンダリング/エディターを実装します。Actionまた、ボタンが押されたときに呼び出す を提供します。

于 2015-04-01T00:41:54.410 に答える
2

の種類TableModelは問いません。にボタンを「表示」したい場合は、ボタンが表す列の値に基づいてボタンをレンダリングできる列に (およびおそらく ) を指定しJTableますTableCellRendererTableCellEditor

TableModelこれは、ボタンを表すモデル内の列をサポートする必要があることを意味します。

Using Custom RenderersUsing Other Editors、およびHow to Use Tablesを詳しく見てください。

于 2015-04-01T00:18:05.227 に答える