0

我的标题有点混乱,所以我会尽力解释。我想要做的是在我的应用程序中有一个背景图像,它在顶部中心保持静态(例如,在 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);

这基于此解决方案 -在 JFrame 中居中 JPanel

这段代码的问题是当我尝试使用 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 使用它?

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

4

1 回答 1

1

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

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

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

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

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

于 2013-05-17T09:59:56.473 回答