0

嗨,我可以将布尔列呈现为 JToggleButton,但如果我按住按钮,我会看到复选框而不是按钮。

 TableColumnModel tcm = smartAlertsTable.getColumnModel();
 TableColumn tc = tcm.getColumn( Index of the boolean column);
 tc.setCellRenderer(new ActiveAlertRenderer());

ActiveAlertRenderer 在哪里

public class ActiveAlertRenderer extends JToggleButton implements
    TableCellRenderer

{

public ActiveAlertRenderer()
{
    super();
}

public Component getTableCellRendererComponent(JTable table, Object value,
        boolean isSelected, boolean hasFocus, int row, int column)
{

    boolean isActive = ((Boolean) value).booleanValue();
    if (isActive)
    {
        this.setText("Armed");
        this.setSelected(false);
        value = Boolean.TRUE;
    }
    else
    {
        this.setText("Triggered");
        this.setSelected(true);
        value = Boolean.FALSE;
    }
    return this;
}

}

如何防止复选框出现?

4

2 回答 2

2

JTable使用复选框作为布尔列的默认渲染器和编辑器。您提供了自己的渲染器,但编辑器保持默认。这是您在编辑单元格时看到的复选框。您必须以TableCellEditor与渲染器类似的方式提供自定义编辑器(的实现)。您可以使用JTable.setDefaultEditor()或进行设置TableColumn.setCellRenderer

有关更多详细信息,请参阅如何使用表教程中的概念:编辑器和渲染器。

于 2013-12-18T23:52:15.793 回答
0

试试这样:

public class ActiveAlertRenderer extends DefaultTableRenderer {
    private JToggleButton toggleButton = new JToggleButton();

    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {

        if (column==INDEX_OF_TOGGLE_BUTTON_COLUMN) {
            boolean active = (Boolean) argValue;
            if (active) {
                toggleButton.setText("Armed");
            } else {
                toggleButton.setText("Triggered");
            }
            toggleButton.setSelected(active);
            return toggleButton; 
        }
        else {
            return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        }
    }

}

于 2013-12-19T00:33:51.023 回答