java在一个JFrame中添加多种类型的背景
我的标题有点让人困惑,所以我会尽力解释。我想做的是在我的应用程序中有一个背景图像,它在顶部中心保持静止(例如,在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与此配合使用
最后,如果这个问题被否决,请留下一个解释,这样我就可以修复/防止它在未来发生
# 1 楼答案
你需要把每个面板叠在一起
从你的
JFrame
开始,使用BorderLayout
,将你TitledPane
添加到它。这将允许标题窗格占据框架的整个空间将
TitledPane
的布局设置为GridBagLayout
。使用以下约束,添加一个JLabel
,其图标属性已设置为您的图像如果将标题的结果缓存到一个单独的
BufferedImage
,速度也会更快。您需要在每次面板被invalidated
时更新它,但它将提供更快的重新绘制