我的头衔有点令人困惑,所以我会试着解释一下。我想要做的是在我的应用程序中有一个背景图像,它在顶部中心保持静止(如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使用它?
最后,如果这个问题被贬低,请留下解释,以便我可以修复/防止它在将来发生。
答案 0 :(得分:1)
您需要将每个面板构建在彼此之上
从JFrame
开始,使用BorderLayout
向您添加TitledPane
。这将使标题窗格占据框架的整个空间。
将TitledPane
的布局设置为GridBagLayout
。使用以下约束,添加JLabel
,其图标属性已设置为您的图像...
GridBagConstraints gbc = new GridBagConstraints();
gbc.weightx = 1;
gbc.weighty = 1;
gbc.anchor = GridBagConstraints.NORTH;
如果将标题的结果缓存到单独的BufferedImage
,它也会更快。每次面板invalidated
时,您都需要更新它,但它会提供更快的重绘...