gpt4 book ai didi

java - 向一个 JFrame 添加多种类型的背景

转载 作者:行者123 更新时间:2023-12-01 14:34:22 29 4
gpt4 key购买 nike

我的标题有点令人困惑,所以我会尽力解释一下。我想要做的是在我的应用程序中有一个背景图像,该背景图像在顶部中心保持静态(例如,x 轴中心,y 轴顶部)。即使 JFrame 的大小被调整,我也想要这个。然而,在该图像下方,我希望我制作的图案能够重复足够多以适合窗口尺寸。

我想了几种方法来做到这一点(并使用了已经回答的 StackOverflow 问题)来想出一个合乎逻辑的解决方案。 (我说合乎逻辑是因为它实际上不起作用。)

我会用这个 -

 JPanel panel = new JPanel();
panel.getContentPane(backgroundImage);
panel.setSize(400, 400); // JFrame arbitrary size.
panel.getContentPane().setLayout(null);
panel.setVisible(true);

int panelX = (panel.getWidth() - panel.getWidth() - panel.getInsets().left - panel.getInsets().right) / 2;
panel.setLocation(panelX, 0);

这是基于此解决方案 - Center a JPanel in a JFrame

这段代码的问题是,当我尝试使用 getContentPane(); 时出现错误。(错误是“JPanel 类型未定义 getContentPane() 方法”。)

在该 JPanel 下方,我将有另一个包含以下代码的 JPanel -

BufferedImage titledImageFile = ImageIO.read(new File(IMAGE_PATH_TILED));
TiledImage test = new TiledImage(tiledImageFile);

public void paintComponent(Graphics g) {
int width = getWidth();
int height = getHeight();
int imageW = tileImage.getWidth(this);
int imageH = tileImage.getHeight(this);

// Tile the image to fill our area.
for (int x = 0; x < width; x += imageW) {
for (int y = 0; y < height; y += imageH) {
g.drawImage(tileImage, x, y, this);
}
}
}

希望我的问题很清楚;我是否以正确的方式处理这个问题,或者我还应该做些什么?另外,我如何让 JFrame 与此一起工作?

最后,如果这个问题被否决,请留下解释,以便我可以修复/防止它将来发生。

最佳答案

您需要将每个面板构建在彼此之上

JFrame 开始,使用 BorderLayout,将 TitledPane 添加到其中。这将允许标题 Pane 占据框架的整个空间。

TitledPane 的布局设置为 GridBagLayout。使用以下约束,添加一个 JLabel,其图标属性已设置为您的图像...

GridBagConstraints gbc = new GridBagConstraints();
gbc.weightx = 1;
gbc.weighty = 1;
gbc.anchor = GridBagConstraints.NORTH;

如果您将标题结果缓存到单独的 BufferedImage 中,速度也会更快。每次面板失效时,您都需要更新它,但它会提供更快的重绘...

关于java - 向一个 JFrame 添加多种类型的背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16605442/

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