【问题标题】:How to add row in AbstractTableModel through Jbutton in java swingjava - 如何通过java swing中的Jbutton在AbstractTableModel中添加行
【发布时间】:2014-01-22 14:17:18
【问题描述】:

我正在使用 Eclipse 做抽象表,我在 java swing 上做。怎么能 我通过按钮添加行?

我正在使用此表进行循环,其中用户输入存储在表中 fireTableCellUpdated(row, col); 以后会进入数据库。

我在我的挥杆中为桌子创建了一个类。

进入数据库的方法是ink到我的实体类(已经完成)。

用户在每个表格单元格中输入键(完成)后,表格将更新。

我已经在 jcombobox 中添加到表格中(已完成)。

class MyTableModel extends AbstractTableModel {

    private String[] columnNames = {"Account", "Discount",
        "Amount due",
        "Memo"
    };
    private Object[][] data = {
        {null, null, null, null}
    };

    public int getColumnCount() {
        return columnNames.length;
    }

    public int getRowCount() {
        return data.length;
    }

    public String getColumnName(int col) {
        return columnNames[col];
    }

    public Object getValueAt(int row, int col) {
        return data[row][col];
    }

    public Class getColumnClass(int c) {
        switch (c) {
            default:
            case 0:
                return String.class;
            case 1:
            case 2:
                return Double.class;

            case 3:
                return String.class;

        }
        //return getValueAt(0, c).getClass();

    }

    public boolean isCellEditable(int row, int col) {
        return true;
    }

    public void setValueAt(Object value, int row, int col) {
        // if (DEBUG) {
        System.out.println("Setting value at " + row + "," + col
                + " to " + value
                + " (an instance of "
                + value.getClass() + ")");
        //}

        data[row][col] = value;
        fireTableCellUpdated(row, col);

        //if (DEBUG) {
        System.out.println("New value of data:");
        printDebugData();
        //}
    }

    private void printDebugData() {
        int numRows = getRowCount();
        int numCols = getColumnCount();

        for (int i = 0; i < numRows; i++) {
            System.out.print("    row " + i + ":");
            for (int j = 0; j < numCols; j++) {
                System.out.print("  " + data[i][j]);
            }
            System.out.println();
        }
        System.out.println("--------------------------");
    }
}

final JTable AddBillTable = new JTable(new MyTableModel());
scrollPane.setViewportView(AddBillTable);

//for(int x = 0; x < 2; x++) insertRow();

TableColumn accountColumn = AddBillTable.getColumnModel().getColumn(0);


accountColumn.setCellEditor(new DefaultCellEditor(JAccountComboBox));


String date = (String) JBillCombo.getSelectedItem();
String supplier= (String) SupplierJcomboBox.getSelectedItem();
String dueDate=(String) JBillDueDate.getSelectedItem();
String account=(String)JAccountComboBox.getSelectedItem();


for (int i = 0 ; i < AddBillTable.getRowCount() ; i++) {
    double discountAmount= 0.0;
    double amount1 = 0.0;
    String memo="";

    for(int j=0; j<4; j++) {
        account=(String)AddBillTable.getValueAt(i,0);
        discountAmount=(double)AddBillTable.getValueAt(i,1);
        amount1=(double)AddBillTable.getValueAt(i, 2);
        memo=(String)AddBillTable.getValueAt(i,3);
    }

    Bill1 e1 = new Bill1(date,account,supplier,amount1,discountAmount,memo,dueDate); 

    //insert into database
    e1.createBill();

有什么想法吗?

【问题讨论】:

  • urgently needed 有两个原因 ---> 1. 尽快发布MCVE 以获得更好的帮助,2. 格式化您的代码,顺便编辑 3. 这种形式的问题和性质不是' t 对 SO 负责
  • -1 :如果您急需某些东西,您可能想花钱请人帮助您。 Stack Overflow 不是技术支持/私人导师。

标签: java mysql sql swing


【解决方案1】:

按以下方式创建模型类以添加行...

public class TableModelTest extends AbstractTableModel implements TableModel {

    private static final long serialVersionUID = 1L;

    private String[] columnNames = {"Account","Discount",
            "Amount due",
            "Memo"
          };

    private ArrayList<ArrayList> data;

    public TableModelTest(ArrayList<ArrayList> data){
        this.data = data;   
    }

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

    public int getColumnCount() {
        return columnNames.length;
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
        return data.get(rowIndex).get(columnIndex);
    }

    public void addRow(ArrayList row){
        data.add(row);
        fireTableDataChanged();
    }
}

现在单击按钮时,您只需调用 TableModelTest 类的addRow() 方法即可。

我可以看到您添加的代码,您正在使用数组数组来维护模型的数据。我建议您在使用 List of List 时不要使用数组数组,因为您的 JTable 会在运行时扩展,并且您可以在我的代码示例中看到相同的内容。 相信会对你有很大帮助。

【讨论】:

  • fireTableDataChanged();是错误的通知搜索 fireTableRowsInserted
猜你喜欢
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 2014-01-23
  • 2010-12-01
  • 2023-02-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多