如何用鼠标select JTable的列名
How to select with the mouse the JTable's column name
我创建了一个查询执行器并使用了一个基于结果集的 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);
除一件事外一切正常。我无法 select 或复制列名。你能给我推荐一个解决方案吗?
这与您的代码无关,它运行良好。
您的问题是默认情况下 JTable 没有此功能。
您将需要实现一个 JTableHeader 鼠标侦听器,它会检测用户何时单击 table header.
一个例子:
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);
}
});
请注意,这将不允许用户 select 或复制列名,因为 Swing 不允许这样做(列名未以允许的方式呈现)。
我在示例中所做的是让代码自动将列名复制到剪贴板。不是一个完美的解决方案,但它会起作用。
我创建了一个查询执行器并使用了一个基于结果集的 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);
除一件事外一切正常。我无法 select 或复制列名。你能给我推荐一个解决方案吗?
这与您的代码无关,它运行良好。 您的问题是默认情况下 JTable 没有此功能。 您将需要实现一个 JTableHeader 鼠标侦听器,它会检测用户何时单击 table header.
一个例子:
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);
}
});
请注意,这将不允许用户 select 或复制列名,因为 Swing 不允许这样做(列名未以允许的方式呈现)。
我在示例中所做的是让代码自动将列名复制到剪贴板。不是一个完美的解决方案,但它会起作用。