【发布时间】:2013-05-12 09:49:22
【问题描述】:
我的标题有点混乱,所以我会试着解释一下。我想要做的是在我的应用程序中有一个背景图像,它在顶部中心保持静态(例如,在 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(); 时出现错误。 (错误是“方法 getContentPane() 未为 JPanel 类型定义”。)
在那个 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 中居中 JPanel” 我刚刚回顾了问答并在基础上对接受的答案投了反对票使用
null布局。请参阅this answer 了解使组件居中的最佳方式。 2)为了尽快获得更好的帮助,请发布SSCCE(如链接示例)。 -
1)。为此,我明白你的意思,我将使用 BorderLayout 方法。 2)。试图获得一个独立的示例将是我如何设置我的项目的地狱......希望我能满足其他要求。感谢您迄今为止的帮助!
标签: java swing background jframe