Java 布局设置中的问题

Java 布局设置中的问题,java,swing,layout,gridbaglayout,border-layout,Java,Swing,Layout,Gridbaglayout,Border Layout,我制作了一个JFrame,在这个框架内,有一个面板,我使用GridBagLayout在上面放置了各种容器。我已将JFrame的布局设置为BorderLayout,并在BorderLayout.WEST中添加了面板。我想在左上角显示面板的容器。我该怎么做 即使我尝试将面板添加到BorderLayout.NORTH中,它也会显示在顶部的中间位置,但是我想显示在左上角 有办法吗?即,我想展示的任何其他布局 label1 button1 button2 button3 label2 b

我制作了一个
JFrame
,在这个框架内,有一个面板,我使用
GridBagLayout
在上面放置了各种容器。我已将
JFrame
的布局设置为
BorderLayout
,并在
BorderLayout.WEST
中添加了面板。我想在左上角显示面板的容器。我该怎么做

即使我尝试将面板添加到
BorderLayout.NORTH
中,它也会显示在顶部的中间位置,但是我想显示在左上角

有办法吗?即,我想展示的任何其他布局

label1
button1     button2     button3

label2
button1     button2     button3

label 3
button1     button2     button3

有很多方法可以做到这一点,其中之一就是进一步嵌套JPanel。放置一个JPanel BorderLayout.NORTH,并给它一个BorderLayout。然后将另一个JPanel添加到这个JPanel,BorderLayout.WEST

边框布局不允许您直接向西北方向添加内容


您可能希望将
JFrame
的布局设置为
GridBagLayout
,这样您就可以拥有所需的灵活性,只需
GridLayout
BorderLayout
即可轻松完成

import java.awt.*;
import javax.swing.*;

class LabelButtonLayout {

    public static Component getButtonLayout(int num) {
        JPanel p = new JPanel(new BorderLayout(3,3));

        p.add(new JLabel("Label " + num), BorderLayout.NORTH);

        JPanel b = new JPanel(new GridLayout(1,0,25,5));
        for (int ii=1; ii<4; ii++) {
            b.add(new JButton("Button " + ii));
        }
        p.add(b, BorderLayout.CENTER);

        return p;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater( new Runnable() {
            public void run() {
                JPanel gui = new JPanel(new GridLayout(0,1,3,15));
                for (int ii=1; ii<4; ii++) {
                    gui.add(getButtonLayout(ii));
                }
                JOptionPane.showMessageDialog(null, gui);
            }
        });
    }
}

import java.awt.*;
导入javax.swing.*;
类标签按钮布局{
公共静态组件getButtonLayout(int num){
JPanel p=新JPanel(新边界布局(3,3));
p、 添加(新的JLabel(“标签”+num),BorderLayout.NORTH);
JPanel b=新JPanel(新网格布局(1,0,25,5));

对于(int ii=1;iiya我已经在Jpanel中使用了gridbag布局来设置容器,正如我已经提到的是。但是你可能想让现在在
BorderLayout
中的
JFrame
成为它自己的
GridBagLayout
。嘿,我们可以在其中设置两个gridbag布局,但是我在gridbag布局中设置的任何东西都会在中间加上。所以both gridx=0和gridy=0重叠如果答案是
GridBagLayout
,那肯定是个愚蠢的问题(大多数时候)。对于
JLabel
,没有必要添加约束性的“左”面板。请参见我的示例。不过,嵌套布局为+1。@Geetanjali,如果我理解你的问题(我不确定我是否理解它),我的示例演示了。请注意,没有类似的
NestedLayout
类。嵌套布局只是将不同的布局组合起来,以实现使用任何其他单一布局都难以实现的效果。@Andrew:是的,先生,我是knw,但我能够在Jframe中添加嵌套Jpanel。向任何内容添加嵌套Jpanel都很容易它需要出现在中。它是否是一个
JOptionPane
/
JDialog
、一个
JFrame
、一个
JWindow
JApplet
、一个
JSplitPane
、另一个
JPanel
等都无关紧要。如果你想不出怎么做,我建议你问另一个问题,并展示请尽你最大的努力。作为个人请求,请不要叫我“先生”。如果有必要特别提到我,“Andrew”很好。要嵌套JPanel,只需创建一个JPanel并将其添加到另一个JPanel中。