java - 如何用鼠标选择 JTable 的列名
问题描述
我创建了一个查询执行器,并使用了一个基于 resultSet 的 JTable 来显示结果。我的 Jtable 实现是这样的:
ResultSetMetaData metaData = rs.getMetaData();
columnCount = metaData.getColumnCount();
Vector<String> columnNames = new Vector<String>();
for (int i = 1; i <= columnCount; i++) {
columnNames.add(metaData.getColumnName(i));
}
Vector<Vector<Object>> data = new Vector<Vector<Object>>();
while (rs.next()) {
Vector<Object> vector = new Vector<Object>();
for (int i = 1; i <= columnCount; i++) {
vector.add(rs.getObject(i));
}
data.add(vector);
}
DefaultTableModel model = new DefaultTableModel(data, columnNames);
model.fireTableStructureChanged();
tableSwing.setModel(model);
除了一件事,一切都很好。我无法选择或复制列名。你能给我推荐一个解决方案吗?
解决方案
这与您的代码无关,它工作得很好。你的问题是 JTable 默认没有这个功能。您将需要实现一个 JTableHeader 鼠标侦听器,该侦听器检测用户何时单击表头。
一个例子:
JTableHeader header = table.getTableHeader();
header.setReorderingAllowed(false);
header.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
int col = header.columnAtPoint(e.getPoint());
StringSelection selection = new StringSelection(table.getColumnName(col));
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(selection, selection);
}
});
请注意,这将不允许用户选择或复制列名,因为 Swing 不允许这样做(列名未以允许的方式呈现)。
我在示例中所做的是使代码自动将列名复制到剪贴板。不是一个完美的解决方案,但它会起作用。
推荐阅读
- google-cloud-dlp - Google DLP 中的文本字典转换
- aws-lambda - 如何将 CloudWatch Lambda Insights 添加到无服务器配置?
- c++ - 如何将以下静态链接程序更改为动态链接程序?
- c - 如何将字符插入二叉树?
- json - angular/ts/json:从总记录中如何知道匹配特定值的计数
- php - 如何使用数据库种子在 codeigniter-3 版本中创建用户?
- string - 使用 net Write 发送数据\r\n 作为字符串而不是 eof 发送
- ios - 该层被“CAShapeLayer”所掩盖,路径为矩形、圆角矩形或椭圆
- database - NoSQL 离线/独立 - 无需 exe 应用程序直接查询 GraphDB 文件?
- php - 如何使用 file_put_contents 解析成 txt 文件