【问题标题】:Problem in setting layout布局设置问题
【发布时间】:2011-11-13 12:40:20
【问题描述】:

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

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

有没有办法做到这一点? IE。我应该使用的任何其他布局,因为我想显示

label1
button1     button2     button3

label2
button1     button2     button3

label 3
button1     button2     button3

【问题讨论】:

    标签: java swing layout gridbaglayout border-layout


    【解决方案1】:

    只需 GridLayoutBorderLayout 即可轻松完成。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 对于JLabel,不需要添加约束“左”面板。看我的例子。不过,对于嵌套布局 +1。
      • @Geetanjali 如果我理解你的问题(我不确定我是否理解它),我的例子就说明了。请注意,没有 NestedLayout 这样的类。嵌套布局只是将不同的布局组合起来,以达到使用任何其他单一布局都难以达到的效果。
      • @Andrew:先生,我知道,但我可以在 Jframe 中添加嵌套的 Jpanel。
      • 很容易将嵌套的 JPanel 添加到需要出现的任何内容中。无论是 JOptionPane/JDialogJFrameJWindow 还是JAppletJSplitPane 的一侧,另一侧 JPanel 等。如果您不知道该怎么做,我建议您问另一个特定的问题,并在 SSCCE 中展示您的最大努力。作为个人要求,请不要称我为“先生”。如果有必要特别提到我,“安德鲁”就可以了。
      • 要嵌套 JPanel,您只需创建一个 JPanel 并将其添加到另一个 JPanel。
      【解决方案3】:

      边框布局不允许您直接向 NORTHWEST 添加内容。

      您可能希望将JFrame 的布局设置为GridBagLayout,以便拥有所需的灵活性

      【讨论】:

      • 是的,我已经在 J​​panel 中使用了 gridbag 布局来设置容器,正如我已经提到的那样
      • 是的。但是您可能希望将JFrame(现在位于BorderLayout 中)设置为GridBagLayout
      • 嘿,我们可以在里面设置两个网格包布局
      • 但是我在网格包布局中设置的任何东西都会在中心出现。所以 gridx=0 和 gridy=0 都重叠
      • 如果GridBagLayout 是答案,那肯定是一个愚蠢的问题(大多数时候)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多