gpt4 book ai didi

java - JXTable 列中的超链接,从数据库中填充

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:30:47 25 4
gpt4 key购买 nike

我的问题是如何使 JXTable 列(仅针对一个/特定列)的超链接像默认桌面 Web 浏览器的“_blank”链接一样操作。

我使用 JXTable 和 DefaultTableModel,我还从 sqlite 数据库中调用数据。我在互联网、谷歌和 [...]

  • 将 MouseListener 注册到 JXTable;
  • 从 MouseEvent 生成点对象;
  • 通过getValueAt获取文本

***注意:该列每个单元格只有 1 个链接,没有任何文本,只有链接。

现在我已经实现了这段代码来执行双击单元格的操作。请有人可以帮助我实现在默认浏览器中打开的列超链接,如 this example (但我不知道如何适应,因为数据不是从数据库调用的)。

Table_Employee.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
JXTable target = (JXTable)e.getSource();
int row = target.getSelectedRow();
int column = target.getSelectedColumn();
JFrame newFrame = new JFrame(); //I want to open an distinc link
newFrame.setTitle("Detail Screen"); //for every cell along one column
newFrame.setVisible(true); //in the web browser, not a frame.
}
}
});

编辑 1@Kleopatra 的 EDIT 2 中的代码对我的应用程序有一些问题。此外,我又尝试了一次类似下面的代码,瞧 - 当涉及第一次点击时,链接就在那里,但没有反应(没有打开浏览器)。@Kleopatra,您能否提供有关您的建议的更多信息,因为当我尝试放置该代码时,IDE 无法识别 hyperlinkColumn

Table_Employee.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 1) {
JXTable target = (JXTable)e.getSource();
int row = target.getSelectedRow();
int column = target.getSelectedColumn();
AbstractHyperlinkAction<Object> simpleAction = new AbstractHyperlinkAction<Object>(null) {

public void actionPerformed(ActionEvent e) {
//open the browser event?
}
};

TableCellRenderer renderer = new DefaultTableRenderer(
new HyperlinkProvider(simpleAction));
Table_Employee.getColumnExt(2).setEditable(false);
Table_Employee.getColumnExt(2).setCellRenderer(renderer);
}
}
});

最佳答案

不涉及监听器,SwingX 有一个 HyperlinkProvider,您可以根据需要简单地配置一个操作:

JXTable table = new JXTable(myModel);
AbstractHyperlinkAction<Object> simpleAction = new AbstractHyperlinkAction<Object>(null) {

public void actionPerformed(ActionEvent e) {
// here goes what you want to do on activating the hyperlink
//LOG.info("hit: " + getTarget());
}

};
TableCellRenderer renderer = new DefaultTableRenderer(
new HyperlinkProvider(simpleAction));
table.getColumnExt(0).setEditable(false);
table.getColumnExt(0).setCellRenderer(renderer);

请注意,该列需要不可编辑才能自动支持超链接。

编辑2

如果要打开浏览器/邮件客户端,请使用配置有 SwingX HyperlinkAction 的 HyerlinkProvider。这是由核心 DesktopAction 支持的。它的目标必须是 URI 类型,然后它会自动检测是否打开一个或另一个。

您可以按列手动安装它:

TableCellRenderer renderer = new DefaultTableRenderer(
new HyperlinkProvider(new HyperlinkAction()));
table.getColumnExt(0).setEditable(false);
table.getColumnExt(0).setCellRenderer(renderer);

事实上,它更简单:JXTable 已经将它作为 URI 类的默认值。您所要做的就是实现您的模型,使其包含 uris 和报告作为其列类:

DefaultTableModel model = new DefaultTableModel(...) {

@Override
Class<?> getColumnClass(int column) {
if (column == hyperlinkColumn) {
return URI.class;
}
... // handle other columns
return super.getColumnClass(column);
}

@Override
boolean isCellEditable(int row, int column) {
if (column == hyperlinkColumn) {
return false;
}
... // handle other columns
return super.isCellEditable(row, column);
}
}

要查看实际支持 - JXList/JXTree 相同 - 运行 SwingLabs web demo :示例在几页上,f.i. JXTable、Hyperlink/extended、Highlighter 以及浏览自带的代码

关于java - JXTable 列中的超链接,从数据库中填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11780845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com