【问题标题】:Making a clickable JXTable or JTable制作可点击的 JXTable 或 JTable
【发布时间】:2015-04-05 01:40:58
【问题描述】:

我创建了一个网络爬虫,然后创建了一个 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);

【问题讨论】:

  • 那不是SSCCE。我无法编译代码,因为它不完整。我无权访问您的数据库。用一个简单的 JTable 创建一个简单的 JFrame。将 URL 硬编码到表格的一两个单元格中。将 MouseListener 添加到表中,然后单击包含 URL 的单元格。 SSCCE 的重点是将问题简化为基本问题。

标签: java swing jtable swingx jxtable


【解决方案1】:

您可以使用自定义编辑器。查看 Using Other Editor 上的 Swing 教程中的部分。当您双击单元格时,该示例将显示一个 JColorChooser 对话框。您可以自定义代码以显示您的 URL 是网页。

看一下目录。本教程还有一个关于How to Integrate With the Desktop Class 的部分,可以轻松显示您的系统浏览器。

或者另一个选项是向表中添加一个 MouseListener,然后再次使用桌面类显示浏览器。该教程还有一个关于How to Write a MouseListener的部分。

【讨论】:

  • 老实说,我不知道我现在在做什么,因为我以前从未使用过这些东西。下面在鼠标侦听器中看起来是否正确?
  • 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);尝试{ if(Desktop.isDesktopSupported()) { Desktop.getDesktop().browse(url.toURI()); }
  • @Relentless 不要发布代码是评论。如您所见,它没有格式化且难以阅读。代码看起来很合理。如果它不起作用,请发布一个正确的SSCCE,以证明您的问题中的问题。并在SSCCE 中使用 JTable,这样我们就不必下载 JXTable 来测试您的代码。
猜你喜欢
  • 2023-03-07
  • 1970-01-01
  • 2021-10-03
  • 1970-01-01
  • 2013-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多