超链接JXTable列,从数据库填充(HyperLinks in JXTable column, p

2019-09-20 16:15发布

我的问题是我怎样才能使从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);
      }
   }
});

Answer 1:

没有参与的听众,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类。 所有你需要做的就是要实现模型,使得其包含的URI和报告,作为其列类:

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网站演示 :例如,在几页,网络JXTable,超链接/扩展,荧光笔,并通过其附带的代码脱脂



文章来源: HyperLinks in JXTable column, populated from database