我的问题是如何将 JXTable 列(仅针对一个/特定列)的超链接设置为我的默认桌面 Web 浏览器的“_blank”链接之类的操作。
我使用 JXTable 和 DefaultTableModel,也从 sqlite 数据库中调用数据。我在互联网、谷歌、[...] 上进行了研究,发现很多信息说,如果我没有弄错:
- 将 MouseListener 注册到 JXTable;
- 从 MouseEvent 生成点对象;
- 通过 getValueAt 获取文本
***注意:该列每个单元格只有 1 个链接,没有任何文字,只有链接。
现在我已经实现了这个代码来做一个双击单元格的动作。请有人可以帮助我实现在默认浏览器中打开的列超链接,就像在这个例子中一样(但我不知道如何适应,因为数据不是从数据库中调用的)。
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 的编辑 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);
}
}
});