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

标签 java swing background 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 与此一起工作?

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

最佳答案

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

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/

相关文章:

java - 使用数组作为参数

java - JScrollPane 包含更新图像的尺寸错误

html - 为什么我的 div 在 Wordpress 中不能有全浏览器宽度的背景色?

java - java中如何按降序打印结果?

java - 如何根据区域设置获取带有时区的数据时间模式?

java - 使用 ActionMap 的 JFrame 键盘快捷键?

html - 如何用CSS添加第二个背景?

iphone - 在进入后台和在前台检索时将 NSTimer 的时间保存到磁盘

java - 在 JRuby 中转换对象

java - 线程的方法调用未完成 - 如何结束线程 - 解决方法