与BoxLayout经理聊天布局

时间:2014-04-27 00:16:17

标签: java swing boxlayout

盒子布局似乎非常适合我在InkScape中制作的典型聊天布局的需求。
enter image description here

我基于这样的结构:

MainFrame
  Chat JPanel - BoxLayout.Y_AXIS
    Message list - ScrollablePanel
       the list - BoxLayout.Y_AXIS
    Text field - Just a text field

现在我遇到的唯一问题是,在初始阶段,文本字段和消息列表之间的空间分为50%到50%。

enter image description here

但是,如果消息区域已填满,如上图所示,我尝试调整聊天窗口的大小,一切顺利:

enter image description here

所以:

  1. 我希望textarea保持相同的大小,即使消息容器为空。
  2. 必须有一个方法可以调用来模拟我调整窗口大小,以便面板正确更新。
  3. 以下是聊天小组:

    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));   
        }
    }
    

1 个答案:

答案 0 :(得分:1)

How to Use BoxLayout: Specifying Component Sizes所示,您可以override所选JTextComponent子类中的getXxxSize()方法。