gpt4 book ai didi

java - 我应该使用什么布局管理器

转载 作者:行者123 更新时间:2023-12-01 19:28:08 24 4
gpt4 key购买 nike

我正在用 java 进行聊天,需要在 JPanel 中显示旧消息。我需要显示一个图像和正在发送/接收的消息,每个都在自己的行上。我目前拥有的代码:

JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel container = new JPanel();
container.setPreferredSize(new Dimension(300, 400));

// Printing five messages
for (int i = 0; i < 5; i++) {
JPanel p = new JPanel();
p.setPreferredSize(new Dimension(300, 40));
p.setBorder(BorderFactory.createLineBorder(Color.BLACK));
p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));

JLabel img = new JLabel("Image : ");
JLabel txt = new JLabel("This is some text");

p.add(img);
p.add(txt);

img.setAlignmentX(Component.LEFT_ALIGNMENT);
txt.setAlignmentX(Component.LEFT_ALIGNMENT);

container.add(p);
}

f.add(container);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);

结果:
enter image description here

现在我指定每条消息的宽度和高度,这不太好,因为它应该自动调整大小以适应其内容。我觉得应该有一个很好的布局管理器,但我是 swing 新手,因此感谢帮助,因为我不知道该使用哪一个。

最佳答案

it should automatically resize to its content.

这里的主要问题是让文本换行。

一种方法可能是:

  1. 使用垂直 Box - 它允许每个组件具有不同的高度
  2. 在 HTML 中换行文本 - 它将允许文本换行

类似于:

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

public class Chat extends JPanel
{
private Box messageBox = Box.createVerticalBox();

public Chat()
{
setLayout( new BorderLayout() );
add(messageBox, BorderLayout.PAGE_START);

addMessage("Short message");
addMessage("A longer message that should wrap as reqired onto another line. This should happen dynamically");
}

public void addMessage(String text)
{
JPanel messagePanel = new JPanel( new BorderLayout() );

JLabel label = new JLabel( new ImageIcon("about16.gif") );
messagePanel.add(label, BorderLayout.LINE_START);

JLabel message = new JLabel("<html>" + text + "</html>");
messagePanel.add(message);

messageBox.add(messagePanel);
}

private static void createAndShowGUI()
{
JFrame frame = new JFrame("Chat");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new Chat());
frame.pack();
frame.setSize(200, 100);
frame.setLocationByPlatform( true );
frame.setVisible( true );
}

public static void main(String[] args) throws Exception
{
java.awt.EventQueue.invokeLater( () -> createAndShowGUI() );
}
}

关于java - 我应该使用什么布局管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60791181/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com