我需要帮助。我正在尝试使用Java GUI,并试图绘制Mancala游戏板。以下是到目前为止我的Mancala开发板代码,但是,当我将粗体部分更改为CENTER时,它就可以正常工作。使用LINE_START或LINE_END怎么不起作用?

通过以下语句在主视图中调用View:

BoardView board = new BoardView();


下面是BoardView代码:

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

public class BoardView extends JFrame{
    public BoardView(){
        setTitle("Mancala Game");
        setSize(550, 450);
        setLayout(new BorderLayout(10, 10));

        drawBoardPanel board = new drawBoardPanel();
        **add(board, BorderLayout.LINE_START);**


        JPanel footer = new JPanel();
        JButton newGame = new JButton("New Game");
        footer.add(newGame);
        JButton quit = new JButton("Quit");
        footer.add(quit);
        add(footer, BorderLayout.PAGE_END);


        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
}

public class drawBoardPanel extends JPanel{
    @Override
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;

        double p1x = 25;
        double p1y = 25;
        double height = 300;
        double width = 50;
        double arcw = 10;
        double arch = 10;

        g2.draw(new RoundRectangle2D.Double(p1x, p1y, width, height, arcw, arch));
    }
    }
}

最佳答案

但是,当我将粗体部分更改为CENTER时,它就可以正常工作。使用LINE_START或LINE_END怎么不起作用?


当您使用CENTER时,组件将获得框架中所有可用的额外空间。

当您使用LINE_START或LINE_END时,组件的首选大小用于为组件保留空间。

您正在执行自定义绘制,并且组件的大小为(0,0),因此没有要绘制的内容。

您需要覆盖组件的getPreferredSize()来为组件提供布局管理器可以使用的大小:

@Override
public Dimension getPreferredSize()
{
    return new Dimension(325, 75);
}

07-24 09:24