gpt4 book ai didi

java - 为什么我不能在BorderLayout中自由放置Rectangle2D?

转载 作者:行者123 更新时间:2023-12-01 10:56:44 25 4
gpt4 key购买 nike

我需要帮助。我正在尝试使用 Java GUI 进行实验,并尝试绘制 Mancala 游戏板。下面是我迄今为止所拥有的 Mancala Board 的代码,但是,当我将粗体部分更改为 CENTER 时,它工作得很好。为什么当我使用 LINE_START 或 LINE_END 时它不起作用?

通过以下语句在 main 中调用 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));
}
}
}

最佳答案

however, when I change the bold part to CENTER, it works just fine. How come it doesn't work when I use LINE_START or LINE_END?

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

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

您正在进行自定义绘制,并且您的组件的大小为 (0, 0),因此无需绘制任何内容。

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

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

关于java - 为什么我不能在BorderLayout中自由放置Rectangle2D?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33589391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com