2015-03-26 3 views
0

Я создал веб-искатель, а затем графический интерфейс для пользователей для поиска по базе данных и т. Д. Я хотел бы, чтобы JXTable теперь можно было щелкнуть, чтобы перейти к URL-адресу. Вот мой код JXTable:Создание интерактивного JXTable или JTable

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); 
+0

Это не «SSCCE». Я не могу скомпилировать код, так как он не является полным. У меня нет доступа к вашей базе данных. Создайте простой JFrame с помощью простого JTable. Hardcode URL-адрес в одну или две ячейки таблицы. Добавьте MouseListener в таблицу и щелкните по ячейке, содержащей URL-адрес. Точка SSCCE заключается в том, чтобы упростить проблему до ее основ. – camickr

+0

Хорошо, не проблема .... – Relentless

ответ

1

Вы можете использовать собственный редактор. Взгляните на раздел из учебника Swing по телефону Using Other Editor. В этом примере отображается диалоговое окно JColorChooser при двойном щелчке по ячейке. Вы можете настроить код для отображения своего URL-адреса на веб-странице.

Ознакомьтесь с оглавлением. В учебнике также есть раздел о How to Integrate With the Desktop Class, который позволяет легко отображать системный браузер.

Или другой вариант - добавить MouseListener в таблицу, а затем отобразить браузер, снова используя класс рабочего стола. В учебнике также есть раздел о How to Write a MouseListener.

+0

Если честно, я понятия не имею, что я делаю сейчас, так как раньше я никогда не использовал этот материал. Оказывается ли снизу прямо в приемнике мыши? – Relentless

+0

outPut = (JXTable) e.getSource(); Точка 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()); } – Relentless

+0

@Relentless Не размещайте код - это комментарий. Как видите, он не отформатирован и его трудно читать. Код выглядит разумным. Если он не работает, разместите надлежащую [SSCCE] (http://sscce.org/), которая демонстрирует проблему в вашем вопросе. И используйте JTable в 'SSCCE', поэтому нам не нужно загружать JXTable, чтобы проверить ваш код. – camickr

Смежные вопросы