Java Swing JPanel 大小不起作用
Java Swing JPanel size not working
frame = new JFrame();
frame.setTitle("Chess Legends");
frame.setBounds(100, 100, 810, 830);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//game panel
panelGame = new JPanel();
panelGame.setBackground(new Color(0, 0, 0));
frame.getContentPane().add(panelGame, BorderLayout.CENTER);
panelGame.setLayout(null);
//board panel
panelBoard = new JPanel();
panelBoard.setBackground(new Color(255, 255, 255));
panelBoard.setBounds(5, 5, 800, 800);
panelGame.add(panelBoard);
这是我的代码。我希望 panelGame 填满整个框架。然后我希望 panelBoard 在 panelGame 中占用 800x800 大小。但是我的panelBoard好像太大了
框架已经大于 panelBoard 的边界,但是当 GUI 启动时..我的 panelBoard 超出了框架。为什么?
my panelBoard extends outside the frame. Why??
框架有装饰(边框、标题栏),占 space。
不要使用空布局,也不要尝试对尺寸进行微观管理。而是使用布局管理器和 pack() 框架,让布局管理器确定大小。
如果您希望面板为 800 x 800,则将 getPreferredSize()
方法重写为 return 该尺寸。
然后你做这样的事情:
PanelBoard panelBoard = new PanelBoard(); // with overridden getPreferredSize()
JPanel panelGame = new JPanel( new BorderLayout() );
panelGame.setBorder( new EmptyBorder(5, 5, 5, 5) );
panelGame.add( panelBoard );
frame.add( panelGame );
frame.pack();
frame.setVisible();
frame = new JFrame();
frame.setTitle("Chess Legends");
frame.setBounds(100, 100, 810, 830);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//game panel
panelGame = new JPanel();
panelGame.setBackground(new Color(0, 0, 0));
frame.getContentPane().add(panelGame, BorderLayout.CENTER);
panelGame.setLayout(null);
//board panel
panelBoard = new JPanel();
panelBoard.setBackground(new Color(255, 255, 255));
panelBoard.setBounds(5, 5, 800, 800);
panelGame.add(panelBoard);
这是我的代码。我希望 panelGame 填满整个框架。然后我希望 panelBoard 在 panelGame 中占用 800x800 大小。但是我的panelBoard好像太大了
框架已经大于 panelBoard 的边界,但是当 GUI 启动时..我的 panelBoard 超出了框架。为什么?
my panelBoard extends outside the frame. Why??
框架有装饰(边框、标题栏),占 space。
不要使用空布局,也不要尝试对尺寸进行微观管理。而是使用布局管理器和 pack() 框架,让布局管理器确定大小。
如果您希望面板为 800 x 800,则将 getPreferredSize()
方法重写为 return 该尺寸。
然后你做这样的事情:
PanelBoard panelBoard = new PanelBoard(); // with overridden getPreferredSize()
JPanel panelGame = new JPanel( new BorderLayout() );
panelGame.setBorder( new EmptyBorder(5, 5, 5, 5) );
panelGame.add( panelBoard );
frame.add( panelGame );
frame.pack();
frame.setVisible();