java - 单击 jtable 中的超链接?

标签 java swing url jtable mouse-listeners

如何为 JTable 中的每条记录启用超链接?

我想要做的是让用户可以点击超链接,然后显示他们可以编辑/更新的信息。

或者,我如何启用表格数据的就地编辑?

另一个问题是我目前正在使用以下方式来显示不同的屏幕。但这不是一种优雅的方式,我理解我们应该使用 cardlayout,但具体如何去做呢?

mainPanel.setVisible(false);
createBlogEntryPanel.setVisible(true);
setComponent(createBlogEntryPanel);

最佳答案

要解决 JTable 消耗事件的问题,您可以将自己的 MouseListener(或 MouseAdapter)添加到 JTable 并在此监听器中进行操作。以下是您可以实现的示例:

public class Main extends JFrame {

public Main() {
    super();

    DefaultTableModel dt = new DefaultTableModel(
            new String[][] { { "http://google.com" }, { "http://gmail.com" } }, new String[] { "Url" });
    final JTable t = new JTable(dt);

    t.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {
            int row = t.rowAtPoint(new Point(e.getX(), e.getY()));
            int col = t.columnAtPoint(new Point(e.getX(), e.getY()));
            System.out.println(row + " " + col);

            String url = (String) t.getModel().getValueAt(row, col);
            System.out.println(url + " was clicked");
            // DO here what you want to do with your url
        }

        @Override
        public void mouseEntered(MouseEvent e) {
            int col = t.columnAtPoint(new Point(e.getX(), e.getY()));
            if (col == 0) {
                t.setCursor(new Cursor(Cursor.HAND_CURSOR));
            }
        }

        @Override
        public void mouseExited(MouseEvent e) {
            int col = t.columnAtPoint(new Point(e.getX(), e.getY()));
            if (col != 0) {
                t.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
            }
        }
    });

    add(new JScrollPane(t));

    t.getColumnModel().getColumn(0).setCellRenderer(new TableCellRenderer() {

        @Override
        public Component getTableCellRendererComponent(JTable table, final Object value, boolean arg2,
                boolean arg3, int arg4, int arg5) {
            final JLabel lab = new JLabel("<html><a href=\"" + value + "\">" + value + "</a>");
            return lab;
        }
    });

    setSize(700, 500);
    setLocationRelativeTo(null);
    setVisible(true);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
}

public static void main(String[] args) {
    try {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (Exception e) {
        e.printStackTrace();
    }

    new Main();
}

}

关于java - 单击 jtable 中的超链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4256680/

相关文章:

java - 如何知道字符串路径是 Web URL 还是基于文件

java - 如何在 hibernate 中使用子查询到 "from"子句?

java - 如何处理对象未能满足java 8流中的过滤器

java - 将报表名称存储在 Interface 、 Enum 中,还是作为报表处理程序类中的常量?

java - 在 JLabel 上的 gif 和 png 之间切换

url - 注意 '' URL 过多 ''

java - 为什么我们不能从 actionPerformed() 中得到 'throws' 异常

java - 我如何在一个类中拥有 JTextArea,并打印到另一个类中的 JTextArea?

java - 无法转换为 [Ljava.lang.Object;

php - opencart 中的 URL 重写