私はハイパーリンクとしてJLabelsを使用しています。私はそれらを見て、ブラウザーのリンクのように正確に機能させるため、テキストペイン/エディターペインなどを使用することは望ましくありません。問題は、これらのリンクが配置されるコンテナの多くは、サイズが指定されていないことです。親のサイズ(または祖父母)に依存します。私はレイアウト用のボックスを使用しています。リンクテキストがボックスの幅の約2/3以上に及ぶ場合、ボックスの内容はボックスの実際の範囲外に伸び始めます(したがって、ボックスがJScrollPane水平スクロールバーが表示されます)。優先/最大/最小サイズのテキストラッピングJLabels
JLabelで折り返しを適用する方法はありますか?私が読んだ多くの記事では、HTMLタグのテキストをputtngすると、必要に応じて自動的に折り返されますが、何をしても動作させることはできません。彼らは行くだろう場所を正確に私は知らないので、私は
タグを使用することはできません(これは自動化することができない限り、 - すなわち
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);
}
}
}