Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.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的JLabel未正确设置宽度_Java_Html_Swing_Resize_Jlabel - Fatal编程技术网

Java 带有HTML的JLabel未正确设置宽度

Java 带有HTML的JLabel未正确设置宽度,java,html,swing,resize,jlabel,Java,Html,Swing,Resize,Jlabel,我正在尝试使用HTMLdiv标记设置JLabel的宽度 考虑以下代码: import javax.swing.*; public class Xyzzy extends JFrame{ public static void main(String[] args) { javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() {

我正在尝试使用HTMLdiv标记设置JLabel的宽度

考虑以下代码:

import javax.swing.*;

public class Xyzzy extends JFrame{
    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                Xyzzy frame = new Xyzzy();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.PAGE_AXIS));

                String s = "x ";
                for (int i=0; i<200; ++i)
                    s += "x ";

                JLabel jl = new JLabel("<html><div style=\"width: 300px;\">" + s + "</div></html>");

                frame.add(jl);

                frame.setSize(600, 600);
                frame.setVisible(true);
            }
        });
    }
}
import javax.swing.*;
公共类xyzy扩展了JFrame{
公共静态void main(字符串[]args){
javax.swing.SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
Xyzzy帧=新的Xyzzy();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(新的BoxLayout(frame.getContentPane(),BoxLayout.PAGE_轴));
字符串s=“x”;

对于(inti=0;i这个html代码对于JLabel来说太复杂了(只支持html规范的一部分)
组件的大小取决于布局。 我更喜欢米格


编辑:JLabel中的HTML非常过时

您正在设置HTML中文本的宽度,而不是
JLabel
的宽度

frame.pack();

Dimension d = label.getSize();
d.width = width;
label.setPreferredSize(d);
使用
setPreferredSize
方法设置
JLabel
的宽度

frame.pack();

Dimension d = label.getSize();
d.width = width;
label.setPreferredSize(d);

正如您所看到的那样,尽管最好让
JLabel自身调整大小,以适应文本。

吉尔伯特,我添加了您的代码,并以以下内容结束:

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

public class Xyzzy extends JFrame{
    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                Xyzzy frame = new Xyzzy();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.PAGE_AXIS));

                String s = "x ";
                for (int i=0; i<200; ++i)
                    s += "x ";

                JLabel jl = new JLabel("<html>" + s + "</html>");

                frame.add(jl);
                frame.pack();

                Dimension d = jl.getSize();
                d.width = 200;
                jl.setPreferredSize(d);

                frame.setSize(600, 600);

                frame.setVisible(true);
            }
        });
    }
}
import javax.swing.*;
导入java.awt.*;
公共类xyzy扩展了JFrame{
公共静态void main(字符串[]args){
javax.swing.SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
Xyzzy帧=新的Xyzzy();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(新的BoxLayout(frame.getContentPane(),BoxLayout.PAGE_轴));
字符串s=“x”;

对于(int i=0;iI不知道它是否总是正确的,但在您的情况下,大小总是比给定的宽度大30%,请尝试使用
float size=300/1.3f;JLabel jl=new JLabel(“+s+”);
并且大小将为300px。这是一种有线解决方法,我不确定它是否总是有效,所以我只是将它放在注释中。get/setPreferredSize与我使用的布局不匹配。另外,我仍然需要…标记,以便强制JLabel中的文本换行。@Claus Tøndering:您必须先将框架布局好,然后才能开始我们的工作e大小。我修复了我回答中的一个错误。如果JLabel中的HTML已经过时,我该如何使文本换行?根据,HTML才是正确的选择。@克劳斯特说JLabel中没有HTML不是过时的,现在是文章和一些描述陈旧而不正确。