JTable 中的 JButton:按钮工作,但单击时文本消失
JButton inside JTable: Button working, but text vanishes on click
我有一个 Jtable,每行都有一个删除行的按钮。
文本设置为 "Delete"。当我 select 按钮时,文本消失了。如何设置 selected 按钮的文本?
渲染器:
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;
}
}
尝试将此 class 与 TableCellEditor
、TableCellRenderer
一起使用
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);
我有一个 Jtable,每行都有一个删除行的按钮。 文本设置为 "Delete"。当我 select 按钮时,文本消失了。如何设置 selected 按钮的文本?
渲染器:
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;
}
}
尝试将此 class 与 TableCellEditor
、TableCellRenderer
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);