JLabels中的超链接

时间:2012-07-26 12:44:12

标签: java swing hyperlink jlabel

这是我在一个名为Test2的文件中的代码,该文件名为test2,在一个名为test2的项目中名为test2;

package test2;

import javax.swing.JFrame;

public class Test2 {
    public static void main(String[] args) {
    JFrame mainWindow = new HtmlWindow("<html>"
            + "<a href=\"http://stackoverflow.com\">"
            + "blah</a></html>");
        mainWindow.setVisible(true);
    }
}

在同一个包中,我将此代码放在名为HtmlWindow.java的文件中;

package test2;

import java.awt.BorderLayout;
import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.JLabel;


class HtmlWindow extends JFrame {
    public HtmlWindow(String refreshGrid) {
        super("blah");
        setSize(300, 100);
        Container content = getContentPane();
        String labelText = refreshGrid;
        JLabel coloredLabel = new JLabel (labelText, JLabel.CENTER); 
        content.add(coloredLabel, BorderLayout.NORTH);

    }

}

当我运行项目时,我得到一个窗口,在预期的位置显示“blah”,蓝色和下划线,但当我将鼠标悬停在单词上时光标不会改变,当我点击它时也没有发生任何事情

我的问题如下;

  • 是否可以在jLabels中添加超链接?
  • 如果是这样,我做错了什么,或者程序运行不正常?
  • 如果没有,什么是好的选择?我不使用JButtons的原因是,最终我想创建一个任意数量的超链接的网格,我希望超链接是图像,虽然JButtons可以有图像,我不希望超链接到看起来像“按钮”。我想我可以使用不可编辑的JEditorPane?

2 个答案:

答案 0 :(得分:4)

Swing不是一个功能齐全的浏览器。它支持包含链接的简单HTML,但不会自动更改光标样式。据我所知,您必须以编程方式执行此操作,即将鼠标侦听器添加到标签中,并在鼠标悬停在标签上时更改光标样式。显然,您可以编写自己的类LinkLabel来实现此逻辑,然后在每次需要时使用它。

答案 1 :(得分:3)

似乎只是通过执行超链接,您将获得通常的Web浏览器行为。根据在线示例,通常做的是在ActionListener上实施JLabel并致电Desktop.getDesktop().browse(new URI("..."));

此调用的问题在于它似乎不适用于所有操作系统。您可以做的是查看是否可以从命令行在浏览器中打开链接,如果可以这样做,您应该能够使用{{1}中的exec方法执行所需操作} .class。但是,这很可能取决于平台。

话虽如此,我认为标签应该用来描绘文字(即使我认为看到链接后,用户会知道会发生什么,所以我认为在这种情况下,我们可以称之为例外)。如果您想拥有一个触发和操作的组件,您可以改为使用Process