7

如标题中所述。我有两个 JPanel,一个在另一个之上,使用BorderLayout().

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

public class myForm(){
    public static void main(String[] args) {       
        JFrame myFrame = new JFrame("SingSong");
        myFrame.setLocation(100,100);
        myFrame.setSize(new Dimension(1024,800));
        myFrame.setLayout(new BorderLayout());
        JPanel jp = new JPanel();
        jp.setBackground(new Color(0x00FF00FF));
        JPanel jp2 = new JPanel(new BorderLayout());
        jp2.setBackground(new Color(0x00000000));

        jp.setPreferredSize(new Dimension(100,400));
        jp2.setPreferredSize(new Dimension(100,400));
        jp2.setLocation(0, 512);

        myFrame.add(jp2, BorderLayout.SOUTH);
        myFrame.add(jp, BorderLayout.NORTH);
    }
}        

它们每个占一半,但是我该如何设置它,以便它们总是占 JFrame 的一半,即使在调整大小时也是如此?(PS 我通常使用更好的变量名,我只是将其作为 SSCCE 进行了整理)

4

2 回答 2

12

试试GridLayout

JFrame myFrame = new JFrame("SingSong");
myFrame.setLocation(100, 100);
myFrame.setSize(new Dimension(1024, 800));

GridLayout layout = new GridLayout(2, 1);
myFrame.setLayout(layout);

JPanel jp = new JPanel();
jp.setBackground(new Color(0x00FF00FF));

JPanel jp2 = new JPanel(new BorderLayout());
jp2.setBackground(new Color(0x00000000));

myFrame.add(jp);
myFrame.add(jp2);

myFrame.setVisible(true);
于 2012-07-24T02:35:58.010 回答
2

当您设置PreferredSize 时,布局管理器将使两个面板的高度始终为400 像素。如果您希望面板始终为框架高度的一半,则不要设置首选尺寸。如果这不起作用,那么您总是可以尝试将面板的高度设置(myFrame.getSize().height) / 2为框架高度的一半。

于 2012-07-24T02:43:27.780 回答