如何将 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 作为框架的内容窗格。此窗格将包括:

  1. 在其 BorderLayout.NORTH 位置,一个 JPanel (timerPane) 和一个 FlowLayout(方向 ComponentOrientation.RIGHT_TO_LEFT)。您可以使用此面板来放置您的 timer Component.
  2. 在其 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(); 
}