Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HTML和MigLayout中文本的奇怪行为_Java_Miglayout - Fatal编程技术网

Java HTML和MigLayout中文本的奇怪行为

Java HTML和MigLayout中文本的奇怪行为,java,miglayout,Java,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

我正在试着适应这个布局,但我不能解决这个问题

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);
}
在这个例子中,如果我

htmlLabel.setTextSome文本 htmlLabel.setTextSome lonnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn; 如果我执行与2相同的操作,但在文本周围添加,例如htmlLabel.setTextSome lonnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 与3相同,但我将BoxLayout设置为面板。i、 e.panel.setlayout新建框布局panel,BoxLayout.PAGE_轴; 后果 我明白了 我明白了 我明白了 我明白了 那么3怎么了?为什么MigLayout会随着文本的增长而将文本居中,而只是在html标记中

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

解决方案 在尝试了查尔斯·克内尔的答案后,它成功了。只是关于如何使用MigLayout的更新。我将标签添加到布局中,如下所示:


addhelpLabel,grow

我相信您的html标记正在定义页面周围的边框,而您的长文本正在到达该边框,在空格旁边创建一行新行

写文章的时候也是这样。如果你到达一行的末尾,那么一个单词的长度超过了每行的字符限制,它不会像书本那样使用连字符。它将开始新的一行,继续这个单词

我的理由是什么?文本从页面左侧开始,但没有到达同一行的末尾。它不是对称的


我没有MigLayout方面的经验,但我相信这可能是使用html标记与不使用html标记导致文本之间失真的原因。

您使用html标记是一种非常非传统的方式

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

在标记方面,您需要的最小值是

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

我按如下方式运行了您的代码,它运行得非常完美:

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

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

以下是修改后的代码:

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

}
这是输出


因此,您将获得默认的JLabel维度,该维度不允许显示字符串的结尾。

这是MigLayout中的一个已知问题。这是5.0中的回归,将在下一版本中修复。截至2018年5月,当前版本为5.1


dguay的解决方案很好,如果可以扩展HTML JLabel。

即使我使用htmlLabel.setText1 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1,我也会得到同样的结果。嗯,这很奇怪。为什么不直接用或元素来包装它呢?这样,你就可以确保它保持在同一条线上。如果没有,那么我会很惊讶。事实上,当我尝试使用编号列表时,问题就出现了。然后,我尝试隔离问题,从而得到简单的代码。我试着把文本放进去,我得到了同样的结果。我试过你的代码,我仍然得到了标签,我认为你不需要java中的标签。我编辑了我的答案,以说明问题是由标签的默认尺寸引起的。这是一种奇怪的行为,但看起来似乎起了作用。谢谢