当前位置: 首页 > 面试题库 >

Java JPanel平铺背景图片

施冠玉
2023-03-14
问题内容

我目前有用于创建JOptionPane的代码,无论我将其设置为什么大小,它都会将图像平铺到背景上:)

package test;
import java.awt.*;  
import java.awt.image.BufferedImage;  
import java.io.*;  
import javax.imageio.ImageIO;  
import javax.swing.*;

public class TiledImage extends JPanel {  
    BufferedImage tileImage;


    public TiledImage(BufferedImage image) {  
        tileImage = image;  
    }

    protected void paintComponent(Graphics g) {  
        int width = getWidth();  
        int height = getHeight();  
        for (int x = 0; x < width; x += tileImage.getWidth()) {  
            for (int y = 0; y < height; y += tileImage.getHeight()) {  
                g.drawImage(tileImage, x, y, this);  
            }  
        }  
    }

    public Dimension getPreferredSize() {  
        return new Dimension(240, 240);  
    }

    public static void main(String[] args) throws IOException {  
        BufferedImage image = ImageIO.read(new File("./resource/patterngrey.png"));  
        TiledImage test = new TiledImage(image);  
        JOptionPane.showMessageDialog(null, test, "", JOptionPane.PLAIN_MESSAGE);  
    }  
}

我遇到的问题是使用相同的代码将图像添加到JFrame中的JPanel背景中,这是我的问题:

package test;
import java.awt.*;  
import java.awt.image.BufferedImage;  
import java.io.*;  
import javax.imageio.ImageIO;  
import javax.swing.*;

public class TiledImage extends JPanel {  
    BufferedImage tileImage;  
    static JFrame mainFrame = new JFrame("Program Name");
    static JPanel userDetailsPanel = new JPanel();

    public TiledImage(BufferedImage image) {  
        tileImage = image;  
    }

    protected void paintComponent(Graphics g) {  
        int width = getWidth();  
        int height = getHeight();  
        for (int x = 0; x < width; x += tileImage.getWidth()) {  
            for (int y = 0; y < height; y += tileImage.getHeight()) {  
                g.drawImage(tileImage, x, y, this);  
            }  
        }  
    }


    public static void main(String[] args) throws IOException {  
        mainFrame.setSize(400,400);
        mainFrame.setLayout(new BorderLayout());
        mainFrame.add(userDetailsPanel, BorderLayout.CENTER);
        BufferedImage image = ImageIO.read(new File("./resource/patterngrey.png"));  
        TiledImage backgroundImage = new TiledImage(image);  
   //   userDetailsPanel.setComponent(backgroundImage); //i know this line is wrong 
   //but i dont know how to correct it
        mainFrame.setVisible(true);
    }  
}

如果有更好的方法可以做到,而代码少得多,那就更好了,我们将不胜感激。我对背景进行排序后,确实需要在背景顶部添加标签和按钮。

背景需要平铺,因为应用程序将在JFrame中具有几个具有不同图案背景的不同JPanels,我想使框架可调整大小


问题答案:

要更正当前存在的问题,可以将TiledImage对象设置为JFrame的内容窗格,然后确保添加到其上的所有面板都不透明。

那是,

public static void main(String[] args) throws IOException {  
    mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    BufferedImage image = ImageIO.read(new File("./resource/patterngrey.png"));  
    TiledImage backgroundImage = new TiledImage(image);  
    // Make backgroundImage the content pane.
    mainFrame.setContentPane(backgroundImage);
    mainFrame.setLayout(new BorderLayout());
    // Make the userDetailsPanel not opaque.
    userDetailsPanel.setOpaque(false);
    mainFrame.add(userDetailsPanel, BorderLayout.CENTER);

    mainFrame.setSize(400,400);
    mainFrame.setVisible(true);
}


 类似资料:
  • 我需要在我的程序中设置一个背景图像。主GUI的结构是: 包含- JPanel的JFrame与包含...等等 我需要在第一个JPanel后面放置一个图像,但我不知道如何。 我写了这段代码: 但是如果我运行它,我只能看到“主”JPanel(“SERVIZI”标签)。如果我指定了setSize(x,y)方法,我只能看到后台JPanel。 是否有任何方法可以将背景图像添加到我的布局中,而无需指定尺寸? 我

  • 问题描述 请问 echarts 图例中通过 backgroundColor设置背景图后,怎么让背景图平铺展示

  • 本文向大家介绍为什么说不提倡用1px的小尺寸图片做背景平铺?相关面试题,主要包含被问及为什么说不提倡用1px的小尺寸图片做背景平铺?时的应答技巧和注意事项,需要的朋友参考一下 因为明明可以用就能搞定的事情为什么要用图片?

  • 问题内容: 我为设置背景图片有一个小问题。 这是我在网站上获得的html: 这是CSS: 我不知道为什么按钮的背景仍然是白色。 问题答案: 令人惊讶的是,这里没有答案解决或提及实际问题。 该CSS选择器说:“给我一个元素与ID 里面 一个元素”,就像这样: 但是,您想要的是 带有* id 的元素。而选择器将是(请注意 button 和 #rock 之间缺少的空间)。 * 正如@Greg已经提到的:

  • 问题内容: 如果选择了该面板(单击该面板),则该面板的颜色为蓝色。另外,我在该面板上添加了一个小标志(图像),它表示所选面板之前已被选中。 因此,如果用户看到例如10个面板,其中有4个带有这个小标记,则他知道自己之前已经单击了这些面板。到目前为止,这项工作还不错。现在的问题是我无法显示小标志并使面板同时变为蓝色。 我使用css将面板设置为蓝色,使用设置背景图像。但是背景色似乎在图像上方,因此您看不

  • 我想让我的libgdx地图滚动,但我不知道代码使地图滚动,请大家帮助我,我想让地图滚动像flappy bird游戏,这是我的代码,显示在屏幕上的地图 }