无法使用CustomTableModel将JButton添加到JTable

时间:2023-01-28 22:30:12

I am creating a Table using a CustomTableModel which extends AbstractTableModel. I am not able to add JButton to the column using this my custom model. If I do new JButton("One") to the model .. I am seeing text "javax.swing.JButton[,0 .... ,defaultCapable=true]" instead of button. Any help Appreciated.

我正在使用CustomTableModel创建一个表,它扩展了AbstractTableModel。我无法使用此自定义模型将JButton添加到列中。如果我对模型执行新的JButton(“One”)..我看到文本“javax.swing.JButton [,0 ....,defaultCapable = true]”而不是按钮。任何帮助赞赏。

public class CustomModelForTable extends AbstractTableModel {

/**
 * 
 */
private static final long serialVersionUID = 1L;

private String[] columnNames = {"First Name",
        "Last Name",
        "Sport",
        "# of Years",
        "Vegetarian",
        "Button"};

private Object[][] data = {
                            {"Kathy", "Smith", "Snowboarding", new Integer(5), new Boolean(false), new JButton("One")},
                            {"John", "Doe", "Rowing", new Integer(3), new Boolean(true), new JButton("Two")},
                            {"Sue", "Black", "Knitting", new Integer(2), new Boolean(false), new JButton("three")},
                            {"Jane", "White", "Speed reading", new Integer(20), new Boolean(true), new JButton("Four")},
                            {"Joe", "Brown", "Pool", new Integer(10), new Boolean(false), new JButton("Five")}
                          };

// # of Rows;
public int getRowCount() {
    return data.length;
}

// # of Columns;
public int getColumnCount() {
    return columnNames.length;
}

public Object getValueAt(int rowIndex, int columnIndex) {
    return data[rowIndex][columnIndex];
}

public Class getColumnClass(int column) {
    return getValueAt(0, column).getClass();
}

public boolean isCellEditable(int rowIndex, int columnIndex) {
    return true;
}

public void setValueAt(Object value, int rowIndex, int columnIndex) {
    if(isCellEditable(rowIndex, columnIndex)) {
       data[rowIndex][columnIndex] = value;
    }
}
}

EDIT: I was able to add the JButton by implementing TableCellRenderer. Thank u all.

编辑:我能够通过实现TableCellRenderer添加JButton。谢谢大家。

1 个解决方案

#1


0  

By implementing TableCellRenderer I am able to add buttons to the table.

通过实现TableCellRenderer,我可以向表中添加按钮。

class CustomModelForTable extends AbstractTableModel {
// Code
// After creating table using model.

 TableCellRenderer defaultRenderer = tableA.getDefaultRenderer(JButton.class);
    tableA.setDefaultRenderer(JButton.class, new      JButtonRendererClass(defaultRenderer) );
// Code
}


class JButtonRendererClass implements TableCellRenderer {

private TableCellRenderer __defaultRenderer;

public JButtonRendererClass(TableCellRenderer myRenderer) {
    __defaultRenderer = myRenderer;
}

public Component getTableCellRendererComponent(JTable table, Object value,
        boolean isSelected, boolean hasFocus, int row, int column) {
    if(value instanceof Component) {
        return (Component) value;
    }
    return __defaultRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
}
}

Thought it could be useful to someone.

认为它可能对某人有用。

#1


0  

By implementing TableCellRenderer I am able to add buttons to the table.

通过实现TableCellRenderer,我可以向表中添加按钮。

class CustomModelForTable extends AbstractTableModel {
// Code
// After creating table using model.

 TableCellRenderer defaultRenderer = tableA.getDefaultRenderer(JButton.class);
    tableA.setDefaultRenderer(JButton.class, new      JButtonRendererClass(defaultRenderer) );
// Code
}


class JButtonRendererClass implements TableCellRenderer {

private TableCellRenderer __defaultRenderer;

public JButtonRendererClass(TableCellRenderer myRenderer) {
    __defaultRenderer = myRenderer;
}

public Component getTableCellRendererComponent(JTable table, Object value,
        boolean isSelected, boolean hasFocus, int row, int column) {
    if(value instanceof Component) {
        return (Component) value;
    }
    return __defaultRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
}
}

Thought it could be useful to someone.

认为它可能对某人有用。