首页 > 解决方案 > 将 JPanel 设置为子 JTextArea 的大小

问题描述

我现在被这个问题困扰了几个小时。我希望 aJPanel是其中的 的大小JTextArea。所以这是我需要帮助的想法。我想编写一个信使,我想在面板中显示我的消息。我的消息是在其中显示消息内容的文本区域的面板。现在我希望面板与显示内容的文本区域大小相同。面板必须具有最大宽度,但必须小于此宽度。这是我的代码:

public class Message extends JPanel{

private NetworkMessage data;

private JTextArea content = new JTextArea();

public Message(NetworkMessage pData) {
    
    data = pData;
    
    this.setLayout(new BorderLayout());
    
    content.setText("Hallo");
    
    
    content.setAlignmentX(LEFT_ALIGNMENT);

    content.setLineWrap(true);
    content.getWrapStyleWord();
    content.setFont(new Font("Sans Serif", Font.PLAIN, 15));

    
    this.setAlignmentX(LEFT_ALIGNMENT);
    this.setPreferredSize(new Dimension(0, 0));
    this.setMaximumSize(new Dimension(Main.messengerFrame.getChatPanel().getWidth()/2 , 500));
    
    this.add(content, BorderLayout.CENTER);
    
}

public NetworkMessage getData() {
    
    return data;}}

这是我的程序现在的样子:screenshot

这是一个最小的、可重现的示例:

public class Main {

public static void main(String[] args) {
    JFrame jf = new JFrame();
    jf.setSize(new Dimension(500, 500));
    jf.setVisible(true);

    JPanel jp = new JPanel();
    jp.setBackground(new Color(255, 0 , 0));
    jp.setOpaque(true);
    jp.setVisible(true);

    JPanel jp2 = new JPanel();
    jp2.setBackground(new Color(0, 255 , 0));
    jp2.setOpaque(true);
    jp2.setVisible(true);
    
    jp2.setPreferredSize(new Dimension(300, 800));
    jp2.setMinimumSize(jp.getPreferredSize());
    jp2.setMaximumSize(jp.getPreferredSize());

    JTextArea jta = new JTextArea();
    jta.setLineWrap(true);
    jta.setWrapStyleWord(true);
    
    jta.setText("Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.");
    
    jp2.add(jta);
    jp.add(jp2);
    jf.add(jp);
    jf.validate();
}
}

这是最小的、可重现的示例:屏幕截图形式的最小、可重现的示例

我希望绿色面板 ( jp2) 与JTextArea. 但是面板应该有一个最大宽度,如果文本区域比最大宽度宽,文本应该有换行符,这样它就会变长但不会变宽。

标签: javaswingresizejpaneljtextarea

解决方案


推荐阅读