【发布时间】:2011-05-13 21:38:23
【问题描述】:
我使用 JLabels 作为超链接。我希望它们的外观和功能与浏览器中的链接完全相同,因此不希望使用文本窗格/编辑器窗格等。问题是这些链接将被放置在其中的许多容器都没有指定大小:它们依赖于其父母(甚至祖父母)的大小。
我正在使用 Boxes 进行布局,如果链接文本跨越了大约三分之二的框宽度,则框内容开始延伸到框的实际边界之外(这样,如果该框被包围通过 JScrollPane,会出现一个水平滚动条)。
有没有办法强制对 JLabel 进行换行?我读过的许多帖子都说,将文本放入 HTML 标签中会导致它在必要时自动换行——但无论我做什么,我都无法让它工作。我不能使用<br /> 标签,因为我不知道它们会去哪里,除非这可以自动化,即:
if(text.length() > wrapLength)
{
//break the text into substrings and insert a <br /> at wrapLength
//the difficulty is in figuring out the value of wrapLength
}
这是超链接类的代码:
import java.awt.Color;
import java.awt.Desktop;
import java.awt.Font;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import javax.swing.JLabel;
public class Hyperlink extends JLabel
{
private URI uri;
private String baseText;
public Hyperlink(String text, String uri, Font font, Color textColor)
{
super(text);
baseText = text;
setFont(font);
setForeground(textColor);
setOpaque(false);
if(Desktop.isDesktopSupported())
{
try
{
setToolTipText(uri);
this.uri = new URI(uri);
addMouseListener(new LinkMouseListener());
}
catch(URISyntaxException ex)
{
}
}
}
private class LinkMouseListener extends MouseAdapter
{
@Override
public void mouseClicked(MouseEvent e)
{
Desktop desktop = Desktop.getDesktop();
try
{
desktop.browse(uri);
}
catch(IOException ioe)
{
System.out.println("Something went wrong..."); //DELETE
}
}
@Override
public void mouseEntered(MouseEvent e)
{
setText("<html><u>" + baseText + "</u></html>");
}
@Override
public void mouseExited(MouseEvent e)
{
setText(baseText);
}
}
}
【问题讨论】:
标签: java swing text jlabel word-wrap