Создание интерактивных JXTable или JTable

Я создал веб-сканер, а затем графический интерфейс для пользователей для поиска в базе данных и т. Д. Теперь я хотел бы, чтобы 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);

person Relentless    schedule 26.03.2015    source источник
comment
Это не SSCCE. Я не могу скомпилировать код, так как он не завершен. У меня нет доступа к вашей базе данных. Создайте простой JFrame с помощью простого JTable. Жестко закодируйте URL-адрес в одну или две ячейки таблицы. Добавьте MouseListener в таблицу и щелкните ячейку, содержащую URL-адрес. Смысл SSCCE состоит в том, чтобы упростить проблему до ее основ.   -  person camickr    schedule 26.03.2015


Ответы (1)


Вы можете использовать пользовательский редактор. Взгляните на раздел учебника по Swing Использование другого редактора< /а>. В примере отображается диалоговое окно JColorChooser при двойном щелчке ячейки. Вы можете настроить код так, чтобы ваш URL-адрес был веб-страницей.

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

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

person camickr    schedule 26.03.2015