fireEditingStopped()从哪来的
时间: 2024-04-22 15:25:12 浏览: 64
`fireEditingStopped()` 方法是 `TableCellEditor` 接口中定义的方法之一,用于通知编辑器停止编辑操作并提交编辑值。
在上面的示例代码中,`CheckBoxHeaderEditor` 类实现了 `TableCellEditor` 接口,并重写了 `itemStateChanged()` 方法来监听复选框状态的改变。在复选框状态改变为选中时,调用 `fireEditingStopped()` 方法来触发编辑器停止编辑的事件,以便通知其他组件或监听器处理编辑值的提交。
`fireEditingStopped()` 方法是 `AbstractCellEditor` 类中的方法,它会触发一个 `CellEditorListener` 的 `editingStopped()` 事件。通过调用 `fireEditingStopped()` 方法,可以通知所有注册的编辑器监听器,表示编辑操作已经完成,并传递编辑器的结果值。
在示例代码中,我们并未实际注册任何编辑器监听器,因此 `fireEditingStopped()` 方法的调用仅仅是为了满足接口要求,以便在编辑器停止编辑时触发相应的事件。如果您需要实际处理编辑值提交的逻辑,可以注册实现了 `CellEditorListener` 接口的监听器,并在其中实现相应的逻辑。
相关问题
ButtonRenderer和ButtonEditor在哪
这里是ButtonRenderer和ButtonEditor的代码实现:
```
import java.awt.Component;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JTable;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
// 自定义的单元格渲染器,用于渲染按钮
class ButtonRenderer implements TableCellRenderer {
private JButton button;
public ButtonRenderer() {
button = new JButton();
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
button.setText((value == null) ? "" : value.toString());
return button;
}
}
// 自定义的单元格编辑器,用于编辑按钮
class ButtonEditor extends DefaultCellEditor {
private JButton button;
private JCheckBox checkBox;
private boolean value;
public ButtonEditor(JCheckBox checkBox) {
super(checkBox);
button = new JButton();
this.checkBox = checkBox;
checkBox.setVisible(false);
}
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int row, int column) {
this.value = (value instanceof Boolean) ? (Boolean) value : false;
checkBox.setSelected(this.value);
return button;
}
public Object getCellEditorValue() {
return checkBox.isSelected();
}
public boolean stopCellEditing() {
value = checkBox.isSelected();
return super.stopCellEditing();
}
protected void fireEditingStopped() {
super.fireEditingStopped();
button.setEnabled(true);
}
protected void fireEditingCanceled() {
super.fireEditingCanceled();
button.setEnabled(true);
}
}
```
ButtonRenderer实现了TableCellRenderer接口,用于渲染单元格。它包含一个JButton,用于渲染单元格。ButtonEditor继承了DefaultCellEditor类,并实现了TableCellEditor接口,用于编辑单元格。它包含一个JButton和一个JCheckBox,用于编辑单元格。当用户单击单元格时,它将显示一个带有复选框的按钮,用户可以选择或取消选择该按钮。
JTable的单元格编辑器重写
在Java Swing中,JTable组件用于显示和编辑二维数据。单元格编辑器(Cell Editor)是JTable中用于修改单元格值的对象。默认情况下,JTable提供了一些基本的编辑器,如文本框(JTextField)和复选框(JCheckBox)。但是,当默认的编辑器不能满足特定需求时,开发者可以通过实现CellEditor接口来自定义单元格编辑器。
单元格编辑器重写主要包括以下几个步骤:
1. 实现CellEditor接口:创建一个新的类,继承自JComponent,并实现CellEditor接口。该接口包含了一系列方法,如getTableCellEditorComponent, shouldSelectCell, stopCellEditing等,需要按照实际需求进行实现。
2. 定制UI:在实现的编辑器类中,根据实际需要设计界面组件,比如增加下拉列表、特殊格式的文本框等。
3. 管理状态:处理编辑器的状态管理,比如确定何时开始编辑、何时停止编辑、是否接受编辑的值等。
4. 注册编辑器:将自定义的编辑器注册到JTable的某一列上,这通常通过设置TableColumn的cellEditor属性来完成。
下面是一个简单的例子,展示如何重写一个简单的整数编辑器,用于编辑整数类型的列:
```java
import javax.swing.*;
import javax.swing.table.TableCellEditor;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class IntegerCellEditor extends AbstractCellEditor
implements TableCellEditor, ActionListener {
private JTextField textField;
private int lastRowEdited;
private int lastColumnEdited;
public IntegerCellEditor() {
textField = new JTextField();
textField.setHorizontalAlignment(JTextField.RIGHT);
textField.addActionListener(this);
}
@Override
public Object getCellEditorValue() {
return Integer.valueOf(textField.getText());
}
@Override
public boolean isCellEditable(EventObject e) {
if (e instanceof MouseEvent) {
return true;
}
return false;
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int row, int column) {
textField.setText(value.toString());
lastRowEdited = row;
lastColumnEdited = column;
return textField;
}
@Override
public void actionPerformed(ActionEvent e) {
stopCellEditing();
}
@Override
public void editingStopped(ChangeEvent e) {
fireEditingStopped();
}
@Override
public void editingCanceled(ChangeEvent e) {
fireEditingCanceled();
}
}
```
然后,可以将这个编辑器应用到JTable的某个列上:
```java
TableColumn column = table.getColumnModel().getColumn(0);
column.setCellEditor(new IntegerCellEditor());
```