我觉得我需要稍微重新表述一下这个问题。
更新问题如下。
我有一个包含:
myjpanel.setLayout(new BoxLayout(selectors, BoxLayout.PAGE_AXIS));
它包含以下三个面板:
具有固定大小“x”和“y”的J面板
没有固定大小的JPanel
没有固定尺寸和小高度的J面板
第二个JGroup包含一个JTable,因此它会扩展以填充整个高度,并按预期将底部面板一直向下推。
像这样:
t
t
m
m
m
m
m
b
t=顶部面板,m=中间面板,b=底部面板。
这很有效。但底部面板感觉不到填充整个父对象的宽度,这是一个问题。
ttt
mmm
b
我想这样,其中面板填充整个宽度:
ttt
mmm
bbb
或者这个,底部面板在左侧居中:
ttt
mmm
b
老问题如下:
我有一个包含:
.setLayout(new BoxLayout(selectors, BoxLayout.PAGE_AXIS));
其中,还有三个JPanel。前两个是固定大小的,中间一个不是。
我希望我的底部面板只采用它需要的高度,但使用外部JPanel的所有可用宽度。
我尝试过使用胶水,但没有效果,我宁愿不设置首选大小和最小/最大大小。是否有一种方法告诉组件仅使用布局管理器和框架“填充整个父宽度”。我不想开始做像设置大小和重写方法这样的事情。
注意:我不能在内部面板中添加任何胶水或填充物,只能修改外部面板及其布局管理器。
尝试1:
使用<code>myPanel。setLayout(新网格布局(3,1)) 未产生预期结果。它制作了一个网格,如下所示:
XX
X
但我期望:
X
X
X
尝试2:
使用myPanel.setLayout(new GridLayout(0,1));
没有产生预期的结果。它制作了一个像这样的网格:
x
x
x
但是所有的面板都是一样的尺寸,忽略了限制。
您可以使用GridBagLayout,为此,使用
gridBagObject.fill = GridBagConstraints.HORIZONTAL
一个帮助您帮助的示例,与GridBagLayout有关。
如评论中所问,与此相关
BoxLayout是另一种选择,它尊重组件的首选大小。如果GridBagLayout有那么难,您可以尝试一下:-)
用GridBagLayout编码,为了更加清晰:
import javax.swing.*;
import java.awt.*;
/**
* Created with IntelliJ IDEA.
* User: Gagandeep Bali
* Date: 1/10/13
* Time: 7:43 PM
*/
public class GridBagExample
{
private void displayGUI()
{
JFrame frame = new JFrame("GridBagLayout Example");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
CustomPanel topPanel = new CustomPanel(Color.BLUE.darker().darker());
CustomPanel middlePanel = new CustomPanel(Color.CYAN.darker().darker());
CustomPanel bottomPanel = new CustomPanel(Color.DARK_GRAY);
JPanel contentPane = new JPanel();
contentPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.FIRST_LINE_START;
gbc.fill = GridBagConstraints.VERTICAL;
gbc.gridx = 0;
gbc.gridy = 0;
gbc.weightx = 1.0;
gbc.weighty = 0.3;
contentPane.add(topPanel, gbc);
gbc.gridy = 1;
contentPane.add(middlePanel, gbc);
gbc.gridy = 2;
gbc.fill = GridBagConstraints.BOTH;
contentPane.add(bottomPanel, gbc);
frame.setContentPane(contentPane);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String... args)
{
EventQueue.invokeLater(new Runnable()
{
@Override
public void run()
{
new GridBagExample().displayGUI();
}
});
}
}
class CustomPanel extends JPanel
{
public CustomPanel(Color backGroundColour)
{
setOpaque(true);
setBackground(backGroundColour);
}
@Override
public Dimension getPreferredSize()
{
return (new Dimension(200, 150));
}
}
输出:
如果使用 BorderLayout
并且 b
面板位于南部
或PAGE_END
则它确实会填充整个宽度。
最简单的方法是使用另一个布局管理器,如<code>GridLayout<code>自动调整组件大小以填充父容器。
myPanel.setLayout(new GridLayout(0, 1));
我想在一个JFrame中用另一个Jpanel替换一个Jpanel,我已经搜索并尝试了我的代码,但什么也没有发生,这是我的代码: 有人能帮帮我吗?多谢
我想在我的基本框架中添加一个带有JPanel的JScrollpane 如果我将带有的直接添加到中,就可以了。但是现在,当我将帧的大小减小到500像素以下时,变得更小,如第二张图片所示。 如何使JScrollPane工作?
我希望来自两个不同类的两个图像并排扩展JPanel。 我遇到的问题是两个JPanel应该在JFrame内部,但是当我做framename.add(panel)时,它会替换另一个,而不是并排添加其中两个。 我尝试在主类中添加flowlayout和其他布局,但是没有一个图像显示出来。 所以我的问题是,如果我有两个扩展Jpanel的类,我如何在Jframe中添加这两个面板,以便它们并排(彼此相邻)而不替
我为欢迎屏幕设计了一个接口,其中有一个JFrame,包括两个JPanel(JPanel1在右边,JPanel2在左边)。左边的按钮用于切换JPanel1中的面板。我想按下一个按钮,用另一个JPanel替换JPanel1内容,但我不知道怎么做。请帮忙。
我刚刚接触Java,正在为我的大学班级做一个项目。我正在开发一款百万富翁游戏,但是我被卡住了。 我有一个JFrame类,其中我有2个面板。第一个由按钮组成,第二个是我想通过按下按钮来更改的面板。按钮具有自己的类及其构造函数,面板也是如此,因为它们具有不同的布局。我需要在按钮类中创建一个方法,以从框架中删除第二个面板并添加第三个面板(在另一个更JPanel类中描述)。因此,从技术上讲,我需要从按钮类
问题内容: 我在另一个内部的JPanel有问题。我不知道为什么,但是结果是一个简单的正方形,但是尺寸不正确。这是为什么? 问题答案: 您需要将panel3的布局也设置为null,否则将使用默认设置: