gpt4 book ai didi

java - HTML 和 MigLayout 中文本的奇怪行为

转载 作者:行者123 更新时间:2023-11-30 06:47:36 25 4
gpt4 key购买 nike

我正在努力适应 MigLayout我无法弄清楚这个问题。

public static void main(String[] args) {
JFrame frame = new JFrame();
JPanel panel = new JPanel();
JLabel htmlLabel = new JLabel();

panel.setLayout(new MigLayout());
htmlLabel.setText(""); // This is where I put my text.

panel.add(htmlLabel);

frame.setPreferredSize(new Dimension(400, 300));
frame.setMinimumSize(frame.getPreferredSize());
frame.setMaximumSize(frame.getPreferredSize());
frame.setLocation(0, 0);

frame.add(panel);
frame.setVisible(true);
}

所以对于这个例子,如果我这样做

  1. htmlLabel.setText("Some TEXT")
  2. htmlLabel.setText("Some LONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNG LONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNG LONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNG LONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNG LONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNG TEXT");
  3. 如果我和#2 一样,但添加 <html></html>围绕文本即 htmlLabel.setText("<html>Some LONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNG LONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNG LONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNG LONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNG LONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNG TEXT</html>")
  4. 与#3 相同,但我设置了 BoxLayout到面板。即 panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));

结果

  1. 我得到 this.
  2. 我得到 this.
  3. 我得到 this.
  4. 我得到 this as expected.

那么#3 有什么问题?为什么 MigLayout随着文本的增长,将文本居中,但就在 html 内标签?

注意:我知道 html标记将使文本换行,但不应移动到中心...

解决方案

在尝试了 Charles Knell 的回答后,它奏效了。只是关于如何使用 MigLayout 进行更新.我将标签添加到布局中,如下所示:

add(helpLabel, "grow")

最佳答案

您使用html标签是一种非常非常规的方式。

这或许可以解释为什么您似乎得到了一些意想不到的结果。

根据标签,您至少需要

<html><body><p>your content</p></body></html> 

参见 https://www.w3schools.com/html/html_elements.asp

我按如下方式运行了您的代码,它运行良好:

package htmlmiglayout;

import javax.swing.*;
import net.miginfocom.swing.*;
import java.awt.Dimension;

public class HTMLMigLayout {

public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //new
JPanel panel = new JPanel();
JLabel htmlLabel = new JLabel();

panel.setLayout(new MigLayout());
htmlLabel.setText("<html><body><p>Some LONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNG LONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNG LONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNG LONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNG LONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNG TEXT</p></body></html>"); // This is where I put my text.

panel.add(htmlLabel);

frame.setPreferredSize(new Dimension(400, 300));
frame.setMinimumSize(frame.getPreferredSize());
frame.setMaximumSize(frame.getPreferredSize());
frame.setLocation(0, 0);

frame.add(panel);
frame.setVisible(true);
}

}

The above code generates the following window:

但是,如果我使用不同的标签尺寸并设置对齐方式以使文本的顶部从标签的顶部开始,我可以重现您的输出。

修改后的代码:

package htmlmiglayout;

import javax.swing.*;
import net.miginfocom.swing.*;
import java.awt.Dimension;

public class HTMLMigLayout {

public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //new
JPanel panel = new JPanel();
JLabel htmlLabel = new JLabel();
htmlLabel.setMaximumSize(new Dimension(300,95));
htmlLabel.setMinimumSize(new Dimension(300,95));
htmlLabel.setVerticalAlignment(SwingConstants.TOP);

panel.setLayout(new MigLayout());
htmlLabel.setText("<html><body><p>Some LONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNG LONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNG LONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNG LONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNG LONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNG TEXT</p></body></html>"); // This is where I put my text.

panel.add(htmlLabel);

frame.setPreferredSize(new Dimension(400, 300));
frame.setMinimumSize(frame.getPreferredSize());
frame.setMaximumSize(frame.getPreferredSize());
frame.setLocation(0, 0);

frame.add(panel);
frame.setVisible(true);
}

}

这是输出

enter image description here

因此,您将获得不允许显示字符串末尾的默认 JLabel 尺寸。

关于java - HTML 和 MigLayout 中文本的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45737095/

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