将 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
此 class 实现了使按钮正常工作所需的 render/editor。您还提供 Action
以在按下按钮时调用。
我正在尝试添加一个 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
此 class 实现了使按钮正常工作所需的 render/editor。您还提供 Action
以在按下按钮时调用。