如何将 JPanel 定位到 JFrame 的右上角
How to position JPanel to upper right corner of JFrame
我写了一个棋盘游戏,现在我想在我的 JFrame 的右上角添加一个计时器。我在想最好通过在右上角放置一个 JPanel 来解决这个问题,然后我会用倒计时时间更新它。但是,我有 运行 问题,我似乎无法弄清楚如何将 JPanel 放置到设定位置。无论我尝试做什么,它似乎都覆盖了整个屏幕,而不是我放置它的大小和位置。
private final JFrame frame = new JFrame("myBoardGame");
private JPanel jp = new JPanel();
public ShowBoard(Board board){
frame.setResizable(false);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setContentPane(board);
frame.setLayout(new BorderLayout());
frame.pack();
frame.setVisible(true);
jp.setLayout(null);
jp.setLocation(300,300);
jp.setSize(100,100)
frame.add(jp);
this.board = board;
getKeyBindings(); }
它没有移动到 300x300 的位置并将其大小设置为 100x100,而是使整个屏幕变灰。我究竟做错了什么?我只是希望能够将 JPanel 围绕 JFrame 移动到最适合的位置。
您可以使用 BorderLayout contentPane
作为框架的内容窗格。此窗格将包括:
- 在其
BorderLayout.NORTH
位置,一个 JPanel
(timerPane
) 和一个 FlowLayout(方向 ComponentOrientation.RIGHT_TO_LEFT
)。您可以使用此面板来放置您的 timer Component
.
- 在其
BorderLayout.CENTER
位置,您的 board
。
您的代码(经过修改以包含此注意事项)如下所示:
private final JFrame frame = new JFrame("myBoardGame");
private JPanel contentPane = new JPanel(new BorderLayout());
private JPanel timerPane = new JPanel(new FlowLayout());
public ShowBoard(Board board){
timerPane.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
contentPane.add(timerPane, BorderLayout.NORTH);
contentPane.add(board, BorderLayout.CENTER);
frame.setResizable(false);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setContentPane(contentPane);
frame.pack();
frame.setVisible(true);
this.board = board;
getKeyBindings();
}
我写了一个棋盘游戏,现在我想在我的 JFrame 的右上角添加一个计时器。我在想最好通过在右上角放置一个 JPanel 来解决这个问题,然后我会用倒计时时间更新它。但是,我有 运行 问题,我似乎无法弄清楚如何将 JPanel 放置到设定位置。无论我尝试做什么,它似乎都覆盖了整个屏幕,而不是我放置它的大小和位置。
private final JFrame frame = new JFrame("myBoardGame");
private JPanel jp = new JPanel();
public ShowBoard(Board board){
frame.setResizable(false);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setContentPane(board);
frame.setLayout(new BorderLayout());
frame.pack();
frame.setVisible(true);
jp.setLayout(null);
jp.setLocation(300,300);
jp.setSize(100,100)
frame.add(jp);
this.board = board;
getKeyBindings(); }
它没有移动到 300x300 的位置并将其大小设置为 100x100,而是使整个屏幕变灰。我究竟做错了什么?我只是希望能够将 JPanel 围绕 JFrame 移动到最适合的位置。
您可以使用 BorderLayout contentPane
作为框架的内容窗格。此窗格将包括:
- 在其
BorderLayout.NORTH
位置,一个JPanel
(timerPane
) 和一个 FlowLayout(方向ComponentOrientation.RIGHT_TO_LEFT
)。您可以使用此面板来放置您的 timerComponent
. - 在其
BorderLayout.CENTER
位置,您的board
。
您的代码(经过修改以包含此注意事项)如下所示:
private final JFrame frame = new JFrame("myBoardGame");
private JPanel contentPane = new JPanel(new BorderLayout());
private JPanel timerPane = new JPanel(new FlowLayout());
public ShowBoard(Board board){
timerPane.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
contentPane.add(timerPane, BorderLayout.NORTH);
contentPane.add(board, BorderLayout.CENTER);
frame.setResizable(false);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setContentPane(contentPane);
frame.pack();
frame.setVisible(true);
this.board = board;
getKeyBindings();
}