我试图习惯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);
}
所以这个例子,如果我做
htmlLabel.setText("Some TEXT")
htmlLabel.setText("Some LONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNG LONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNG LONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNG LONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNG LONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNG TEXT");
<html></html>
,htmlLabel.setText("<html>Some LONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNG LONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNG LONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNG LONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNG LONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNG TEXT</html>")
BoxLayout
设置为面板。即panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
那么#3有什么问题?为什么MigLayout
会在文本增长时将文本居中,但只是在html
标记内?
注意:我知道html
标记会使文字换行,但它不应该移到中心...
在尝试了Charles Knell的回答之后,它起了作用。只是有关如何使用MigLayout
进行更新的更新。我将我的标签添加到布局中:
add(helpLabel, "grow")
答案 0 :(得分:2)
您正在使用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);
}
}
但是,如果我使用不同的标签尺寸并设置对齐方式,使文本的顶部从标签的顶部开始,我可以重现您的输出。
以下是修改后的代码:
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维度不允许显示字符串的结尾。
答案 1 :(得分:1)
我相信你的html标签正在定义页面周围的边框,以及你的长文本&#34;正在到达那个边界,在这个空间创造了一条新线。
编写文本时的方式相同。如果你到达一条线的末尾,然后有一个比每行字符数限制更长的单词,它不会做一个连字符,类似于书的方式。它将开始一个新的界限,继续说道。
我背后的理由?文本从页面左侧稍微开始,但没有到达同一行的最后。它不对称。
我没有MigLayout的经验,但我相信这可能是导致文本在使用html标签与不使用它们之间失真的原因。
答案 2 :(得分:1)
这是MigLayout(https://github.com/mikaelgrev/miglayout/issues/41)中的已知问题。它是5.0中的回归,将在下一个版本中修复(截至2018年5月的当前版本为5.1)。
如果可以增加HTML#available
,dguay的解决方法效果很好。