JTabel实现行的拖动
时间: 2023-07-28 15:10:19 浏览: 93
在 JTable 中实现行的拖动,可以通过以下步骤来完成:
1. 启用表格行的选择模式,以便用户可以选择要拖动的行。可以使用以下代码启用表格行的选择模式:
```java
table.setRowSelectionAllowed(true);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
```
2. 创建一个鼠标适配器,以便捕获鼠标拖动事件。在鼠标拖动事件中,可以获得被拖动的行的索引,并将其存储在一个变量中。
```java
MouseAdapter mouseAdapter = new MouseAdapter() {
private int rowIndex = -1;
public void mousePressed(MouseEvent e) {
JTable table = (JTable) e.getSource();
Point point = e.getPoint();
int row = table.rowAtPoint(point);
if (row >= 0 && row < table.getRowCount()) {
rowIndex = row;
}
}
public void mouseReleased(MouseEvent e) {
rowIndex = -1;
}
public void mouseDragged(MouseEvent e) {
if (rowIndex < 0) {
return;
}
JTable table = (JTable) e.getSource();
Point point = e.getPoint();
int row = table.rowAtPoint(point);
if (row < 0 || row == rowIndex) {
return;
}
DefaultTableModel model = (DefaultTableModel) table.getModel();
model.moveRow(rowIndex, rowIndex, row);
table.getSelectionModel().setSelectionInterval(row, row);
rowIndex = row;
}
};
table.addMouseListener(mouseAdapter);
table.addMouseMotionListener(mouseAdapter);
```
3. 在鼠标拖动事件中,获取被拖动的行的索引,并将其存储在一个变量中。
4. 在鼠标拖动事件中,获取当前鼠标指针下的行的索引。如果当前鼠标指针下没有行,或者当前鼠标指针下的行和被拖动的行的索引相同,则不执行任何操作。
5. 在鼠标拖动事件中,使用 DefaultTableModel 的 moveRow() 方法将被拖动的行移动到当前鼠标指针下的行的位置。然后,使用 JTable 的 setSelectionInterval() 方法选择被移动的行。
6. 完成上述步骤后,即可在 JTable 中实现行的拖动。