Я создал веб-сканер, а затем графический интерфейс для пользователей для поиска в базе данных и т. Д. Теперь я хотел бы, чтобы JXTable можно было щелкнуть, чтобы перейти к URL-адресу. Вот мой код для JXTable:
outPut = new JXTable(tableModel);
add(new JScrollPane(outPut), BorderLayout.CENTER);
outPut.setEditable(false);
AbstractHyperlinkAction<Object> simpleAction = new AbstractHyperlinkAction<Object>(null) {
@Override
public void actionPerformed(ActionEvent e) {
//No idea what goes here
}
};
Я получил его для отображения из базы данных, как показано ниже, но не знаю, как сделать ячейки интерактивными.
Просто показывает результат поиска
Предполагается, что это прослушиватель мыши для таблицы. Совсем не работает к сожалению. Я также установил для редактирования таблицы значение false. Я не уверен, куда идти после этого, потому что я не уверен, правильно ли исследование, которое я читаю, или нет.
private static boolean isURLColumn(JTable outPut, int column) {
return column>=0 && outPut.getColumnClass(column).equals(URL.class);
}
public void mouseClicked(MouseEvent e) {
outPut = (JTable)e.getSource();
Point pt = e.getPoint();
int ccol = outPut.columnAtPoint(pt);
if(isURLColumn(outPut, ccol)) {
int crow = outPut.rowAtPoint(pt);
URL url = (URL)outPut.getValueAt(crow, ccol);
try {
if(Desktop.isDesktopSupported()) {
Desktop.getDesktop().browse(url.toURI());
}
}
catch(Exception ex) {
ex.printStackTrace();
}
}
}
Это код, который заполняет JTable, используя модель таблицы по умолчанию:
ResultSetMetaData metaData = rS.getMetaData();
// Names of columns
Vector<String> columnNames = new Vector<>();
int columnCount = metaData.getColumnCount();
for (int i = 1; i <= columnCount; i++) {
columnNames.add(metaData.getColumnName(i));
}
// Data of the table
Vector<Vector<Object>> data = new Vector<>();
while (rS.next()) {
Vector<Object> vector = new Vector<>();
for (int i = 1; i <= columnCount; i++) {
vector.add(rS.getObject(i));
}
data.add(vector);
}
tableModel.setDataVector(data, columnNames);
tableModel.setRowCount(maxRow);
SSCCE
. Я не могу скомпилировать код, так как он не завершен. У меня нет доступа к вашей базе данных. Создайте простой JFrame с помощью простого JTable. Жестко закодируйте URL-адрес в одну или две ячейки таблицы. Добавьте MouseListener в таблицу и щелкните ячейку, содержащую URL-адрес. Смысл SSCCE состоит в том, чтобы упростить проблему до ее основ. - person camickr   schedule 26.03.2015