Java 如何使用整个Jlabel来保存文本

Java 如何使用整个Jlabel来保存文本,java,Java,我想知道是否有一种方法可以使用JLabel整个区域来显示文本,每当我使用JLabel时,所有文本都在中间,即使文本量超过JLabel的大小。有没有办法告诉JLabel中的文本使用整个JLabel?您可以。。。 使用html包装文本,并将其设置为标签,它将自动包装到容器的约束 还要记住,布局管理器的选择将对输出产生很大影响。这两个示例都使用了边框布局,但您也可以使用GridBagLayout,请注意您的意思是将文本展开,还是将其字体改大?我想知道您是否希望进行自定义绘制,并使用FontMetri

我想知道是否有一种方法可以使用JLabel整个区域来显示文本,每当我使用JLabel时,所有文本都在中间,即使文本量超过JLabel的大小。有没有办法告诉JLabel中的文本使用整个JLabel?

您可以。。。 使用
html
包装文本,并将其设置为标签,它将自动包装到容器的约束


还要记住,布局管理器的选择将对输出产生很大影响。这两个示例都使用了
边框布局
,但您也可以使用
GridBagLayout
,请注意

您的意思是将文本展开,还是将其字体改大?我想知道您是否希望进行自定义绘制,并使用FontMetrics来帮助确定使用的字体大小。展开这正是我想要的。如果您的文本较大,请使用一个使用
GridLayout(1,0)
(一行,可变列)的JPanel,并将每个字母作为其自己的JLabel添加到同一个JPanelOr中,然后使用JTextArea并更改其属性,使其看起来像JLabel。当然,您需要设置换行和换行属性。@ComputerCoderAN答案归结为多种因素的组合。如果您希望标签“扩展”其宽度以匹配文本的大小,那么您需要使用布局管理器来允许它这样做。如果要将文本换行为多行,则需要用html换行,或者使用and readonly
JTextArea
,还需要使用支持它的布局管理器
public class TestHTMLLabel {

    public static void main(String[] args) {
        new TestHTMLLabel();
    }

    public TestHTMLLabel() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                StringBuilder sb = new StringBuilder(64);
                sb.append("<html>I have something to say, it's beter to burn out then to fade away.").
                                append("  This is a very long String to see if you can wrap with in").
                                append("the available space</html>");

                JLabel label = new JLabel(sb.toString());

                JFrame frame = new JFrame("Test");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(label);
                frame.setSize(100, 100);
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }    
        });
    }        
}
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            StringBuilder sb = new StringBuilder(64);
            sb.append("I have something to say, it's beter to burn out then to fade away.").
                            append("  This is a very long String to see if you can wrap with in").
                            append("the available space");
            setLayout(new BorderLayout());
            JTextArea ta = new JTextArea(10, 20);
            ta.setOpaque(false);
            ta.setEditable(false);
            ta.setBorder(null);
            ta.setWrapStyleWord(true);
            ta.setLineWrap(true);
            ta.setText(sb.toString());
            add(ta);
        }

    }

}