Java Swing JList在BorderLayout中动态调整大小

Java Swing JList在BorderLayout中动态调整大小,java,swing,chat,jlist,Java,Swing,Chat,Jlist,目前我正在聊天。目前,基地已经建立,我试图使它更美好。因此,现在我想做一个在线用户列表,但我不知道如何制作以下内容: 我当前的聊天记录(忽略德语): 我已通过以下方式设置在线列表的大小: JScrollPane userListSP = new JScrollPane(); userListSP.setPreferredSize(new Dimension(200,0)); 但是滚动窗格始终保持在x=200 我试图通过添加minimumSIze来修复它: userListSP.setMini

目前我正在聊天。目前,基地已经建立,我试图使它更美好。因此,现在我想做一个在线用户列表,但我不知道如何制作以下内容: 我当前的聊天记录(忽略德语):

我已通过以下方式设置在线列表的大小:

JScrollPane userListSP = new JScrollPane();
userListSP.setPreferredSize(new Dimension(200,0));
但是滚动窗格始终保持在x=200 我试图通过添加minimumSIze来修复它:

userListSP.setMinimumSize(new Dimension(50,0));

我的问题:有人知道如何实现它的大小调整,但同时仍然足够大吗?

尝试以下示例:

package com.test.package;

import java.awt.Color;
import javax.swing.DefaultListModel;
import javax.swing.GroupLayout;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;

/**
 *
 * @author rmu
 */
public class ChatDemo extends JFrame {

    private final JScrollPane scrollPaneMessages;
    private final JList<String> listMessages = new JList<String>();
    private final JPanel pnlUsers = new JPanel();
    private final JTextField txtUserMsgInput = new JTextField();

    public ChatDemo() {
        scrollPaneMessages = new JScrollPane(listMessages);
        pnlUsers.setBackground(Color.WHITE);
        setVisible(true);
        setTitle("Chat layout demo");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        putSampleData();
        organizeLayout();
    }

    private void organizeLayout() {
        GroupLayout layout = new GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                        .addComponent(scrollPaneMessages, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE)
                        .addComponent(pnlUsers, 50, 50, 50))
                .addComponent(txtUserMsgInput)
        );
        layout.setVerticalGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                        .addComponent(scrollPaneMessages)
                        .addComponent(pnlUsers))
                .addComponent(txtUserMsgInput, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE)
        );
        layout.setAutoCreateGaps(true);
        layout.setAutoCreateContainerGaps(true);
        pack();

    }

    private void putSampleData() {
        DefaultListModel<String> listModel = new DefaultListModel<>();
        listModel.addElement("Very long string with many characters... Oh, so long!!");
        listModel.addElement("This string is shorter");
        listMessages.setModel(listModel);
    }

    public static void main(String[] args) {
        new ChatDemo();
    }
}
package com.test.package;
导入java.awt.Color;
导入javax.swing.DefaultListModel;
导入javax.swing.GroupLayout;
导入javax.swing.JFrame;
导入javax.swing.JList;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
导入javax.swing.JTextField;
/**
*
*@作者rmu
*/
公共类ChatDemo扩展了JFrame{
私有最终JScrollPane滚动窗格消息;
private final JList listMessages=新建JList();
私有最终JPanel pnlUsers=新JPanel();
私有最终JTextField txtUserMsgInput=新JTextField();
公共聊天室(){
scrollPaneMessages=新的JScrollPane(listMessages);
挫折背景(颜色:白色);
setVisible(真);
setTitle(“聊天版面演示”);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
putSampleData();
organizeLayout();
}
私有void organizeLayout(){
GroupLayout=newgrouplayout(getContentPane());
getContentPane().setLayout(布局);
layout.setHorizontalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(滚动窗格消息、GroupLayout.PREFERRED\u大小、GroupLayout.PREFERRED\u大小、Short.MAX\u值)
.addComponent(pnlUsers,50,50,50))
.addComponent(txtUserMsgInput)
);
layout.setVerticalGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
.addComponent(滚动窗格消息)
.addComponent(pnlUsers))
.addComponent(txtUserMsgInput、GroupLayout.PREFERRED_SIZE、GroupLayout.PREFERRED_SIZE、GroupLayout.PREFERRED_SIZE、GroupLayout.PREFERRED_SIZE)
);
layout.setAutoCreateGaps(真);
layout.setAutoCreateContainerGaps(真);
包装();
}
私有void putSampleData(){
DefaultListModel listModel=新的DefaultListModel();
addElement(“包含许多字符的非常长的字符串…哦,太长了!!”;
addElement(“此字符串较短”);
setModel(listModel);
}
公共静态void main(字符串[]args){
新ChatDemo();
}
}

“有人知道如何实现它的大小调整,但同时仍然足够大吗?”Put放在一个拆分窗格中,让用户决定它应该有多宽(这是我的建议,而不是所有其他的胡闹)。第二个选择是使用GroupLayout,它更灵活。在addComponent()方法中,可以为每个组件指定最小、首选和最大大小。见: