BorderLayout无法正确显示

我想要一个JFrame,在左右两侧有一个边框,边框为黑色,宽度为withfOfJFrame / 10。

现在,我的尝试如下所示:

JFrame f = new JFrame();

f.setSize(800, 600);

f.setLayout(new BorderLayout());

JPanel leftBorder = new JPanel();

JPanel rightBorder = new JPanel();

leftBorder.setBackground(Color.black);

rightBorder.setBackground(Color.black);

leftBorder.setSize(f.getWidth()/10, f.getHeight());

rightBorder.setSize(f.getWidth()/10, f.getHeight());

JPanel center = new JPanel();

center.setBackground(Color.red);

f.add(leftBorder, BorderLayout.WEST);

f.add(center, BorderLayout.CENTER);

f.add(rightBorder, BorderLayout.EAST);

f.setVisible(true);

这会在左右两侧添加一个黑色边框,但是该边框具有固定的大小,并且在调整窗口大小时不会重新计算。大小甚至不是800(JFrame的开始宽度)的1/10。

我究竟做错了什么?还是有更好的方法来做到这一点?

回答:

您可以使用GridBagLayout和适当的权重来获得所需的结果:

public class Snippet {

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable() {

@Override

public void run() {

JFrame f = new JFrame();

f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

JPanel leftBorder = new JPanel();

JPanel rightBorder = new JPanel();

leftBorder.setBackground(Color.black);

rightBorder.setBackground(Color.black);

JPanel center = new JPanel();

center.setBackground(Color.red);

f.setLayout(new GridBagLayout());

GridBagConstraints gbc = new GridBagConstraints();

gbc.fill = GridBagConstraints.BOTH;

gbc.weighty = 1.0;

gbc.gridy = 0;

gbc.gridwidth = 1;

gbc.gridheight = 1;

gbc.gridx = 0;

gbc.weightx = 0.1;

f.add(leftBorder, gbc);

gbc.gridx = 1;

gbc.weightx = 0.8;

f.add(center, gbc);

gbc.gridx = 2;

gbc.weightx = 0.1;

f.add(rightBorder, gbc);

f.pack();

f.setVisible(true);

}

});

}

}

以上是 BorderLayout无法正确显示 的全部内容, 来源链接: utcz.com/qa/399268.html

回到顶部