gpt4 book ai didi

java - 如何向 jframe 添加多个矩形(尝试以简单的方式编码 2048)

转载 作者:行者123 更新时间:2023-12-02 09:52:44 26 4
gpt4 key购买 nike

我已经制作了游戏,并希望使用矩形而不是 jlabel 让我的 GUI 看起来更好,现在我开始意识到 GUI 上只显示最后绘制的矩形

我已经尝试过不同的布局

我的 GUI 类:

public class GUI_N    
{
private Spiel spiel;
private KeyEvent e;
private String beste;
private int beste1;
private DrawingComponent[][] feld;
GUI_N(){
feld = new DrawingComponent[4][4];
spiel = new Spiel();
beste1 = 0;
beste = "Highscore: "+beste1;


JFrame g=new JFrame("2048 - Main");
g.setSize(500,500);
g.setFocusable(true); //wichtig für KeyListener
g.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
int i = 0;
int j = 0;
int h = 0;
int l = 0;
while(i<4)
{
while(j<4)
{
if(i==0){
h = 50;
}else if(i==1){
h = 100;
}else if(i==2){
h = 150;
}else if(i==3){
h = 200;
}
if(j==0){
l = 50;
}else if(j==1){
l = 100;
}else if(j==2){
l = 150;
}else if(j==3){
l = 200;
}
feld[i][j] = new DrawingComponent(l,h,50,50);
feld[i][j].setBounds(l,h,50,50);
j++;
}
j=0;
i++;
}
i = 0;
j = 0;
while(i<4)
{
while(j<4)
{
g.add(feld[i][j]);
j++;
}
j=0;
i++;
}
//g.getContentPane().setBackground(new Color(20, 40, 50));
g.setVisible(true);

}

public static void main(String[] args) {
new GUI_N();
}
}

我的矩形类:

public class DrawingComponent extends JComponent
{
private Graphics2D g2;
private int wert;

private int x;
private int y;
private int w;
private int h;

public DrawingComponent(int px,int py,int pw,int ph)
{
x=px;
y=py;
w=pw;
h=ph;
}
public void paintComponent(Graphics g)
{
g2 = (Graphics2D) g;

Rectangle rect1 = new Rectangle(x,y,w,h);
g2.setColor(Color.RED);
g2.fill(rect1);
}

public void setWert(int x)
{
wert = x;
}

public int getWert()
{
return wert;
}
}

正如我所说,仅显示最后绘制的矩形。

如何实现这一目标?

最佳答案

现在您正在将矩形直接添加到框架中。您应该在中间有一个 JPanel 层,您可以为其提供一个 LayoutManager(GridLayout 是一个很好看的)来排列所有矩形。

所以你会得到这样的东西:

JFrame g = new JFrame("2048 - Main");
// GridLayout (on next line) takes number of rows and columns
JPanel panel = new JPanel(new GridLayout(4, 4));
// ... add all the rectangles to the panel here
g.add(panel);

然后您可以将矩形添加到面板中,而不是框架中。当您添加它们时,它们将自动进入网格中的适当位置。

panel.add(feld[i][j]);

此外,如果您使用 GridLayout,它会动态调整组件的大小并使其适合网格,因此它也可以为您节省一些代码,因为您不需要在 GUI 类中对它们的大小进行硬编码。

关于java - 如何向 jframe 添加多个矩形(尝试以简单的方式编码 2048),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56201424/

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