【问题标题】:JButton inside JTable: Button working, but text vanishes on clickJTable 中的 JButton:按钮工作,但单击时文本消失
【发布时间】:2017-06-16 09:48:51
【问题描述】:

我有一个 Jtable,每行都有一个按钮来删除该行。 文本设置为“删除”。当我选择按钮时,文本消失。如何设置所选按钮的文本?

渲染器:

public class JButtonRenderer  extends JButton implements TableCellRenderer {

    public JButtonRenderer(){
        this.setText("Delete");
    }

    @Override
    public Component getTableCellRendererComponent(JTable arg0, Object arg1, boolean arg2, boolean arg3, int arg4,
            int arg5) {
        return this;
    }
}

编辑:

public class DeleteButtonCellEditor extends AbstractCellEditor implements
TableCellEditor {

private JButton button = new JButton();

private static final long serialVersionUID = 1L;

public DeleteButtonCellEditor(){
    button.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent arg0) {
              //Perform Button Actions
        }
    });
}

@Override
public Object getCellEditorValue() {
    return "Delete";
}

@Override
public Component getTableCellEditorComponent(JTable arg0, Object arg1, boolean arg2, int arg3, int arg4) {
    return button;
}
}

【问题讨论】:

  • 显示你的表模型类
  • 我使用 DefaultTableModel
  • 点击按钮或选择行时文本消散?
  • 当我点击按钮时它消失了。如果选择行,文本不会消失。

标签: java swing jtable jbutton settext


【解决方案1】:

尝试将此类与TableCellEditorTableCellRenderer 一起使用

class JButtonRenderer extends AbstractCellEditor implements TableCellEditor, TableCellRenderer {

        public JButtonRenderer() {
        }

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            JButton b = new JButton("Delete");
            return b;
        }

        @Override
        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, final int row, int column) {
            JButton b = new JButton("Delete");
            b.addActionListener(new java.awt.event.ActionListener() {

                @Override
                public void actionPerformed(ActionEvent e) {
                    // code
                }
            });
            return b;
        }

        @Override
        public Object getCellEditorValue() {
            return null;
        }

        @Override
        public boolean isCellEditable(EventObject anEvent) {
            return true;
        }

        @Override
        public boolean shouldSelectCell(EventObject anEvent) {
            return true;
        }
    }

并使用:

JButtonRenderer compCellDelete = new JButtonRenderer();

jTable1.getColumnModel().getColumn(your_column_index).setCellEditor(compCellDelete);
jTable1.getColumnModel().getColumn(your_column_index).setCellRenderer(compCellDelete);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多