以下是一个示例,演示了如何通过按下键时滚动表格行:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class ScrollTableRowDemo extends JFrame {
private JTable table;
private JScrollPane scrollPane;
public ScrollTableRowDemo() {
setTitle("Scroll Table Row Demo");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setPreferredSize(new Dimension(400, 300));
String[] columnNames = {"Name", "Age", "Gender"};
Object[][] data = {
{"John", 25, "Male"},
{"Alice", 30, "Female"},
{"Bob", 35, "Male"},
{"Lisa", 20, "Female"}
};
table = new JTable(data, columnNames);
scrollPane = new JScrollPane(table);
// 添加按键事件监听器
table.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
int selectedRow = table.getSelectedRow();
int rowCount = table.getRowCount();
if (keyCode == KeyEvent.VK_UP && selectedRow > 0) {
table.setRowSelectionInterval(selectedRow - 1, selectedRow - 1);
table.scrollRectToVisible(table.getCellRect(selectedRow - 1, 0, true));
} else if (keyCode == KeyEvent.VK_DOWN && selectedRow < rowCount - 1) {
table.setRowSelectionInterval(selectedRow + 1, selectedRow + 1);
table.scrollRectToVisible(table.getCellRect(selectedRow + 1, 0, true));
}
}
});
add(scrollPane);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new ScrollTableRowDemo());
}
}
在这个示例中,我们创建了一个包含表格的窗口,并添加了一个按键事件监听器。监听器会在按下上下箭头键时,根据当前选中的行来滚动表格。如果选中行不是第一行(按下上箭头键)或不是最后一行(按下下箭头键),则会选择上一行或下一行,并将该行滚动到可见区域。
注意,要使按键事件生效,需要确保表格具有焦点。可以通过单击表格或使用table.requestFocus()
方法来将焦点设置到表格上。