当前位置: 首页 > 知识库问答 >
问题:

当JLabel包含HTML时,BoxLayout不尊重胶水

段干浩荡
2023-03-14

我编写了一个组件,它使用BoxLayout对一些JLabels进行水平布局,然后使用glue(我希望JLabels的宽度保持不变)。例如:

我需要为每个JLabel添加两行文本,所以我使用了一点HTML。当我添加HTML时,BoxLayout就不再尊重胶水了。我得到的是:

我可以通过指定最大大小应该等于首选大小(指定首选大小没有影响)来绕过这个问题。这是正确的做法吗?当我的JLabels中有HTML时,为什么glue似乎被忽略了,有什么解释吗?

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);
    }
}
}

共有1个答案

单于钊
2023-03-14

当我的JLabels中有HTML时,为什么glue似乎被忽略了,有什么解释吗?

BoxLayout将尊重组件的最大大小(和最小大小)。

对于普通文本,最大大小将是组件的首选大小,因此胶水按预期工作。

@Override
public Dimension getMaximumSize()
{
    return getPreferredSize();
}
 类似资料:
  • 我正在尝试创建一个,它由HTML文本和助记符组成。效果很好。我能够获取为其设置标签的组件的焦点。 感谢任何回答。

  • 我试图将一个JLabel和一个JScrollPane(包含一个JTextArea)对齐到一个JPanel的左边。当我把JTextArea直接放在面板中时,对齐是正确的。只有当JTextArea在滚动窗格中时,对齐方式才不正确。 下面的第一个图像带有滚动窗格,第二个图像没有滚动窗格。如何正确对齐滚动窗格?

  • 问题内容: 在纯Java SE 6环境中: Eclipse控制台中未显示任何内容。 l.info(“”) 及以上的作品就好了,但低于任何 罚款 只是似乎没有工作。有什么问题吗?TIA。 问题答案: 即使Logger级别设置为ALL,ConsoleHandler(记录器上的默认Handler)仍然具有INFO的默认级别。这来自 JAVA_HOME / jre / lib中 的默认logging.pr

  • 我有一个将launchMode设置为singleTask的活动: 我有一个持续的通知,其中包含启动该活动的PendingIntent: 当我与现有的MyActivity交互时,我点击Home并通过启动器重新启动MyActivity,MyActivity的按预期调用。 问题是,当我与现有的MyActivity交互时,我点击正在进行的通知,通过创建一个新的MyActivity,通过销毁现有的MyAct

  • 配置。php(已编辑但仍有相同的问题): 我的索引。php: 结果是我的网站标题是 不像我想。。。 有什么我应该改变的吗?目标是:我想在因此,如果需要编辑,只需编辑配置即可。php ----编辑----顺便说一句,谢谢你的回答,现在是工作 我使用@Tanuel评论 再次感谢你 我根据第一个答案对答案(绿色清单)进行投票,因为我使用了来自评论的语法

  • 场景:我已经使用helm图表部署了一个服务,我可以在我的hpa设置中看到我的服务、hpa、部署、吊舱等:最小吊舱计数被设置为1。我可以看到我的吊舱正在运行,能够处理服务请求。 过了一段时间--我已经执行了--“Kubectl scale Deploy--Replicas=0”一旦运行上面的命令,我就可以看到我的pod被删除了(尽管hpa最小pod设置被设置为1),但我希望过一段时间后hpa会扩展到