这是我在一个名为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”,蓝色和下划线,但当我将鼠标悬停在单词上时光标不会改变,当我点击它时也没有发生任何事情
我的问题如下;
答案 0 :(得分:4)
Swing不是一个功能齐全的浏览器。它支持包含链接的简单HTML,但不会自动更改光标样式。据我所知,您必须以编程方式执行此操作,即将鼠标侦听器添加到标签中,并在鼠标悬停在标签上时更改光标样式。显然,您可以编写自己的类LinkLabel
来实现此逻辑,然后在每次需要时使用它。
答案 1 :(得分:3)
似乎只是通过执行超链接,您将获得通常的Web浏览器行为。根据在线示例,通常做的是在ActionListener
上实施JLabel
并致电Desktop.getDesktop().browse(new URI("..."));
。
此调用的问题在于它似乎不适用于所有操作系统。您可以做的是查看是否可以从命令行在浏览器中打开链接,如果可以这样做,您应该能够使用{{1}中的exec
方法执行所需操作} .class。但是,这很可能取决于平台。
话虽如此,我认为标签应该用来描绘文字(即使我认为看到链接后,用户会知道会发生什么,所以我认为在这种情况下,我们可以称之为例外)。如果您想拥有一个触发和操作的组件,您可以改为使用Process
。