0

Web クローラーを作成し、ユーザーがデータベースなどを検索するための GUI を作成しました。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);
4

1 に答える 1