盒子布局似乎非常适合我在InkScape中制作的典型聊天布局的需求。
我基于这样的结构:
MainFrame
Chat JPanel - BoxLayout.Y_AXIS
Message list - ScrollablePanel
the list - BoxLayout.Y_AXIS
Text field - Just a text field
现在我遇到的唯一问题是,在初始阶段,文本字段和消息列表之间的空间分为50%到50%。
但是,如果消息区域已填满,如上图所示,我尝试调整聊天窗口的大小,一切顺利:
所以:
以下是聊天小组:
public class ChatPanel extends JPanel {
private BoxLayout layout;
private TextField input;
private MessageList messages;
public ChatPanel() {
layout = new BoxLayout(this, BoxLayout.Y_AXIS);
setLayout(layout);
//Create message list
messages = new MessageList();
messages.appendTo(this);
//Create text field
input = new TextField();
add(input);
}
public void addMessage(String message) {
messages.addMessage(message);
}
public void appendTo(JFrame frame) {
frame.getContentPane().add(this);
}
}
这是messageList:
public class MessageList extends JPanel {
public MessageList() {
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
}
public void addMessage(String message) {
JLabel lb = new JLabel();
lb.setText(message);
add(lb);
validate();
}
public void appendTo(JPanel frame) {
frame.add(new JScrollPane(this));
}
}
答案 0 :(得分:1)
如How to Use BoxLayout: Specifying Component Sizes所示,您可以override所选JTextComponent
子类中的getXxxSize()
方法。