gpt4 book ai didi

java - 如何使用 Java GUI 面板?

转载 作者:行者123 更新时间:2023-11-30 09:52:52 24 4
gpt4 key购买 nike

我想让图像出现在网格的顶部,但是它们似乎被打包到不同的面板中。

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;
import javax.swing.*;

@SuppressWarnings("serial")
public class test4 extends JPanel {

BufferedImage image;
Dimension size = new Dimension();

public test4(BufferedImage image) {
this.image = image;

JPanel content = new JPanel(new GridLayout(8,8));

for (int i = 0; i < 8*8; ++i) {
JPanel panel = new JPanel();

if ( i % 2 == i/8 % 2) {
panel.setBackground(Color.WHITE);
} else {
panel.setBackground(Color.DARK_GRAY);
}
content.add(panel);
}
this.add(content);
}

protected void paintComponent(Graphics g) {
int x = 100;
int y = 300;
g.drawImage(image, x, y, this);
}

public static void main(String[] args) throws IOException {
String path = "images/Untitled.png";
BufferedImage image = ImageIO.read(new File(path));

test4 test = new test4(image);
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_O…
f.add(test);
f.setSize(400,400);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}

最佳答案

however they seem to be packed into to different panels.

这是因为默认情况下 JPanel 使用 FlowLayout。 FlowLayout 尊重添加到它的任何组件的大小。空 JPanel 的默认大小为 10 X 10,这是 FlowLayout 的默认水平/垂直间隙。因此,您的棋盘在面板顶部以其首选大小为中心。

您可以通过添加以下内容轻松解决此问题:

setLayout( new BorderLayout() );

i would like to have the image appear on top of the grid

这对我来说没有任何意义?你为什么要在棋盘上画一个图像?

如果您想要棋子,请创建一个 JLabel 并将标签添加到各个棋子方 block 。

如果您希望在游戏开始时显示图像,请使用模态 JDialog 在 JLabel 中显示图像。

如果您想更好地理解绘画,那么通常您会重写 paintComponent 来绘制图像。然而,在这种情况下,将绘制图像,然后将国际象棋面板绘制在图像之上,因此您永远不会看到图像。

如前所述,正确的方法是使用分层 Pane ,但这仍然可以通过覆盖面板的 paint() 方法来完成:

public void paint(Graphics g)
{
super.paint(g);
int x = 50;
int y = 50;
g.drawImage(image, x, y, this);
}

要了解其工作原理,请阅读 Understanding the Paint Mechanism 上的 Swing 教程部分。 .现在您应该看到图像是在绘制子组件之后绘制的。

关于java - 如何使用 Java GUI 面板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4094318/

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