Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Boxlayout拉伸我的Jpanels_Java_Swing_User Interface_Stretch_Boxlayout - Fatal编程技术网

Java Boxlayout拉伸我的Jpanels

Java Boxlayout拉伸我的Jpanels,java,swing,user-interface,stretch,boxlayout,Java,Swing,User Interface,Stretch,Boxlayout,嘿(:这是我第一次在这个论坛上寻求帮助,所以我希望我所做的一切都是正确的 好的,我的问题是我用红色标记了什么。我的JPanel使用的是Boxlayout.Y_轴方向的Boxlayout。我想这不是正确的选择。我不希望我的JPanel(在线用户)、我的JSeperator和我的其他JPanel(管理员)彼此分开。我希望它们直接堆叠在一起 图形用户界面图片: 我听说我应该能够使用某种“胶水”,但无法按预期工作。我还听说我必须使用GridBagLayout,但这似乎非常复杂,我真的希望有更简单的方法

嘿(:这是我第一次在这个论坛上寻求帮助,所以我希望我所做的一切都是正确的

好的,我的问题是我用红色标记了什么。我的JPanel使用的是Boxlayout.Y_轴方向的Boxlayout。我想这不是正确的选择。我不希望我的JPanel(在线用户)、我的JSeperator和我的其他JPanel(管理员)彼此分开。我希望它们直接堆叠在一起

图形用户界面图片:

我听说我应该能够使用某种“胶水”,但无法按预期工作。我还听说我必须使用GridBagLayout,但这似乎非常复杂,我真的希望有更简单的方法

以下是标记的JPanel的代码(不知道是否需要):

包客户端;
导入服务器。用户;
导入java.awt.BorderLayout;
导入java.util.HashMap;
导入java.util.Iterator;
导入javax.swing.BoxLayout;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.jsepator;
/**
*
*@author Sune
*/
公共类OnlineUsersPanel扩展了JPanel{
私有UserWindow所有者;公共void setOwner(UserWindow uw){owner=uw;}
私有HashMap userPanels=newhashmap();
公共在线用户spanel(){
this.setLayout(新的BoxLayout(this,BoxLayout.Y_轴));
添加(addStart());
添加(新的jsepator());
System.out.println(“OnlineUsersPanel con调用”);
}
void addUser(用户){
ShowUserPanel newPanel=newshowUserPanel(所有者,user.getUserName());
userPanels.put(user.getUserName(),newPanel);
添加(newPanel);
owner.updateGUI();
}
void deleteUser(用户){
显示用户面板以移动;
for(迭代器i=userPanels.keySet().Iterator();i.hasNext();){
字符串tempUserName=(字符串)i.next();
if(tempUserName.equals(user.getUserName())){
toRemove=userPanels.remove(tempUserName);
这个。删除(删除);
System.out.println(“Fundet og fjernet”);
打破
}
}
}
私有JPanel addStart(){
JPanel p=新的JPanel();
p、 setLayout(新的BorderLayout());
p、 添加(新JLabel(“在线用户”)、BorderLayout.LINE_START);
p、 添加(新的JLabel(“静音”)、边界布局。行结束);
返回p;
}

我希望有人能教我如何正确使用胶水,或者告诉我如何使用胶水(:

编辑:更改为答案:

问题是,两个JPACK的容器使用的是什么样的布局?也在显示许多用户吗?你需要JLIST或JTHT吗?你能显示一个你想要GUI看起来什么样子的图片,当有一个典型的用户数量时可以显示它。吃东西和发帖子。这需要你做一些工作,但很值得

编辑1:

在进一步查看您的图像时,我建议您在此处使用带有“在线用户”和“静音”的JTable作为列标题和当前显示的内容,管理员和复选框作为JTable的一行。将其放在JScrollPane中,并显示在当前显示的位置。

将两个面板添加到boxlayout后,请执行以下操作

add(Box.createVerticalGlue());

这将把这两个面板缩小到它们喜欢的尺寸,并在下面留出空间。

谢谢你的回复,很抱歉我没有提供足够的信息。下面是我的程序按照我的意愿运行的图片(:(无法作为新用户上传图片:/)我听从了你的建议,检查了我的布局管理器。然后我意识到,每次我添加一个用户时,我都会给它一个新的布局管理器。显然,这让布局变得糟糕up@Sune:你肯定想使用JTable。我没有选择JTable的唯一原因是因为我不知道如何使用:p但是的,我想那会更容易/更好olution@Sune:它仍然是一个更好的解决方案,使用起来也不难。您只需要阅读有关它的教程。我与教程的不同之处在于,我建议您在JTable的模型中使用DefaultTableModel,而不是AbstractTableModel。DefaultTableModel更易于使用。谢谢,我将尝试使用它取而代之的是一张桌子。不幸的是,我无法让它正常工作,但谢谢你的解释(:胶水只会使我的其他面板(用户名)稍微向上移动。它的行为就像我插入了另一个不可见的用户。他们只是共享所有可用的空间。
add(Box.createVerticalGlue());