Я новичок в Java Swing и у меня есть проблемы с Jbutton в ячейке Jtable.
Проблема в том, что Jbutton работает только один раз, а затем он не работает.
После первого раза, когда я нажимаю снова, ничего не происходит, getTableCellEditorComponent вызывается только один раз.
Я хочу, чтобы он работал как обычная кнопка.
Классы «Мой редактор кнопок» и «Средство рендеринга кнопок»:
package buttonontable;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.EventObject;
import java.util.HashMap;
import javax.swing.DefaultCellEditor;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.event.CellEditorListener;
import javax.swing.event.ChangeEvent;
import javax.swing.table.TableCellEditor;
public class MyButtonEditor extends JButton implements TableCellEditor {
protected JButton button;
ButtonOnJtableAction buttonOnJtableAction;
String labelStr;
public MyButtonEditor(String buttonStr,ButtonOnJtableAction _buttonOnJtableAction) {
super(buttonStr);
buttonOnJtableAction = _buttonOnJtableAction;
button = new JButton();
button.setOpaque(true);
System.out.println("MyButtonEditor constructed");
}
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
System.out.println("getTableCellEditorComponent");
JOptionPane.showMessageDialog(table, "Pressed at " + row + "x" + column);
buttonOnJtableAction.buttonPressed(table,row,column);
return this;
}
public void cancelCellEditing() {
System.out.println("cancelCellEditing");
System.out.println("Cancel");
}
public boolean stopCellEditing() {
System.out.println("stopCellEditing");
return true;
}
public Object getCellEditorValue() {
System.out.println("getCellEditorValue");
return null;
}
public boolean isCellEditable(EventObject anEvent) {
return true;
}
public boolean shouldSelectCell(EventObject anEvent) {
return true;
}
public void addCellEditorListener(CellEditorListener l) {
}
public void removeCellEditorListener(CellEditorListener l) {
}
protected void fireCellEditing(ChangeEvent e){
}
}
package buttonontable;
import java.awt.Component;
import javax.swing.JButton;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.table.TableCellRenderer;
public class MyButtonRenderer extends JButton implements TableCellRenderer {
String buttonStr;
public MyButtonRenderer(String _buttonStr) {
setOpaque(true);
buttonStr = _buttonStr;
setText(buttonStr);
}
public Component getTableCellRendererComponent(JTable table, Object value,boolean isSelected, boolean hasFocus, int row, int column) {
System.out.println("getTableCellRendererComponent");
if (isSelected) {
setForeground(table.getSelectionForeground());
setBackground(table.getSelectionBackground());
} else{
setForeground(table.getForeground());
setBackground(UIManager.getColor("Button.background"));
}
setText( (value ==null) ? buttonStr : value.toString() );
return this;
}
}