gpt4 book ai didi

java - 当 JLabel 包含 HTML 时,BoxLayout 不遵守胶水

转载 作者:行者123 更新时间:2023-11-28 00:57:41 27 4
gpt4 key购买 nike

我编写了一个组件,它使用 BoxLayout 水平布置一些 JLabel,然后是胶水(我希望 JLabel 的宽度保持固定)。例如:

enter image description here

我需要向每个 JLabel 添加两行文本,因此我使用了一些 HTML。一旦我添加了 HTML,BoxLayout 就不再依赖胶水了。我得到类似的东西:

enter image description here

我可以通过指定最大尺寸应等于首选尺寸来解决这个问题(指定首选尺寸没有任何效果)。这是正确的方法吗?对于为什么当我的 JLabel 中有 HTML 时胶水似乎被忽略,是否有一些解释?

MWE:

import javax.swing.*;
import java.awt.*;

public class LabelBreak extends JFrame {

JPanel panel;

public LabelBreak() {
setTitle("Frame");
panel = new MyPanel();
panel.setPreferredSize(new Dimension(500, 100));
add(panel);
}

public static void main(String[] args) {
EventQueue.invokeLater(() -> {
JFrame frame = new LabelBreak();
frame.pack();
frame.setVisible(true);
});
}

private static class MyPanel extends JPanel {
private MyPanel() {
super();
this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
JPanel header = new JPanel();
header.setLayout(new BoxLayout(header, BoxLayout.X_AXIS));
//JLabel label = new JLabel("One");
JLabel label = new JLabel("<html>One<br>is<br>the<br>loneliest<br>number</html>");
label.setBorder(BorderFactory.createLineBorder(Color.RED, 2));
header.add(label);
label = new JLabel("Two");
label.setBorder(BorderFactory.createLineBorder(Color.RED, 2));
header.add(label);
header.add(Box.createHorizontalGlue());
this.add(header);
}
}
}

最佳答案

Is there some explanation for why glue seems to be ignored when there's HTML in my JLabels?

BoxLayout 将遵守组件的最大尺寸(和最小尺寸)。

对于普通文本,最大尺寸将是组件的首选尺寸,因此粘合会按预期工作。

看起来 HTML 与常规文本的最大大小计算不同。

I can get around this by specifying that the maximum size should be equal to the preferred size

是的,这是一种合理的方法,但我会覆盖 getMaximumSize() 方法以简单地返回 getPreferredSize() 值。

@Override
public Dimension getMaximumSize()
{
return getPreferredSize();
}

这样,如果您更改 HTML,它仍然可以工作。

关于java - 当 JLabel 包含 HTML 时,BoxLayout 不遵守胶水,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43992317/

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