簡體   English   中英

AbstractTableModel和單元格編輯器

[英]AbstractTableModel and cell editor

我找到的示例: http//www.java2s.com/Code/Java/Swing-Components/ButtonTableExample.htm顯示如何使用指定的列(按鈕)創建JTable。 它工作正常,但我的問題是,我需要使用AbstractTableModel而不是DefaultTableModel(如示例所示)。

所以我創建了自己的TableModel,它擴展了AbstractTableModel:

public class TableModel extends AbstractTableModel { //..
}

並替換:

 DefaultTableModel dm = new DefaultTableModel();
dm.setDataVector(new Object[][] { { "button 1", "foo" },
    { "button 2", "bar" } }, new Object[] { "Button", "String" });

JTable table = new JTable(dm);

對於:

JTable table = new JTable(new TableModel());

然后沒有任何反應,當我點擊某一行按鈕時。 有什么建議么?

確保重寫AbstractTableModel.isCellEditable方法以使用按鈕為列返回true ,否則將不會觸發編輯器。 默認情況下,此方法返回false

此外,請確保覆蓋getColumnName()以返回正確的名稱,因為您鏈接的示例嘗試查找名為“Button”的列來設置編輯器。

你可能會發現@camickr對Table Button Column的實現非常有用。

此演示模型可以與鏈接樣本中的編輯器和渲染器一起使用:

public class DemoTableModel extends AbstractTableModel {
    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return (columnIndex == 0);
    }

    @Override
    public int getRowCount() {
        return 2;
    }

    @Override
    public int getColumnCount() {
        return 2;
    }

    @Override
    public String getColumnName(int columnIndex) {
        switch (columnIndex) {
        case 0:
            return "Button";
        case 1:
            return "Value";
        }
        return null;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        switch (columnIndex) {
        case 0:
            return "Button";
        case 1:
            return "Value";
        }
        return null;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM