我需要帮助。我正在尝试使用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);
}