gpt4 book ai didi

java - 没有首选/最大/最小尺寸的文本包装 JLabel

转载 作者:行者123 更新时间:2023-12-02 00:42:20 24 4
gpt4 key购买 nike

我使用 JLabels 作为超链接。我希望它们的外观和功能与浏览器中的链接完全相同,因此使用文本 Pane /编辑器 Pane 等是不可取的。问题是,许多将放置这些链接的容器没有指定大小:它们依赖于其父级(甚至祖 parent )的大小。

我使用框进行布局,如果链接文本的宽度超过框宽度的三分之二,则框内容开始延伸到框的实际边界之外(因此,如果该框被包围通过 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);
}
}
}

最佳答案

在标签上,尝试 setPreferredSize(new Dimension(width, height))setSize(new Dimension(width, height))setMaximumSize(new Dimension(width, height)) 并将宽度设置为您希望其换行的宽度。我认为在你的情况下它将是 setMaximumSize(...)。

由于布局管理器的原因,它不会自动换行。某些布局管理器会忽略首选尺寸或其他尺寸。就您而言,您可能只需要尝试不同的 setXXXSize() 方法并找到您的布局管理器所遵循的方法。

要获得首选宽度,您必须从父级之一获取宽度。再次强调,根据布局管理器,您可能需要获取首选宽度、最大宽度或 getSize().getWidth()。如果不了解有关布局的更多信息,很难说您到底需要如何执行此操作,但您确实需要在标签上设置某种宽度以使其换行 - 没有办法解决这个问题。

我能想到的唯一其他选择是将标签上的首选宽度设置为您知道应该始终适合可用空间的任意值。

关于java - 没有首选/最大/最小尺寸的文本包装 JLabel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5998055/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com