java - 将 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
. 但是面板应该有一个最大宽度,如果文本区域比最大宽度宽,文本应该有换行符,这样它就会变长但不会变宽。
解决方案
推荐阅读
- css - CSS 相邻类
- php - gRPC PHP 客户端 HTTP 标头
- biztalk - 在 Disassembler 管道组件中 - 仅从 GetNext() 方法发送最后一条消息
- c# - 数据绑定组合框到文本框
- javascript - ES6 导入和导出语法的“意外令牌 {”错误
- php - Laravel 5.6 - 基于 URL GET 参数登录后重定向到路由
- mysql - 截断中的MySql通用查询日志文件名
- php - 为每个用户发送带有唯一参数的 URL
- python - 在python中读取json值时出现无效参数错误
- postgresql - 将 PostgreSQL 列转换为存储类型