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

如何创建重叠的背景和前景图像?

谢鸿飞
2023-03-14
问题内容

通过使用Java swing,有什么可用的方法来创建可在静态 背景图像上移动的前景
图像(例如骑士图像)?

我们可以JLabel使用图像图标吗?


问题答案:

解决方案还解决中提到的问题:图像在JFrame的是覆盖彼此不显示在两个图像海誓山盟

如果我们尝试添加背景图像和一些前景图像,那么如果我们打算让这些图像彼此重叠,则可能会有些棘手,因为
Java提供的许多布局可能会阻止组件(例如JLabel)彼此重叠。将图像定位到确切位置也是一个问题。

与其创建多个装满imageIcon的JLabel,不如直接在面板上绘制。这是一个自定义面板,其中包含我们要绘制的图像实例

class DrawingSpace extends JPanel
{
    private BufferedImage bg, hero;
    private int bgWidth, bgHeight;
    private int heroWidth, heroHeight;  
    private int scWidth, scHeight;
    private int mouseX, mouseY;

    public DrawingSpace(){      
        loadImages();
        init();     
        setPreferredSize(new Dimension(scWidth, scHeight));     
        addMouseMotionListener(new MouseHandler());     
    }

    private void init(){
        mouseX = 0;
        mouseY = 0;
        heroWidth = hero.getWidth();
        heroHeight = hero.getHeight();      
        bgWidth = bg.getWidth();
        bgHeight = bg.getHeight();      
        scWidth = bgWidth;
        scHeight = bgHeight;        
    }

    private void loadImages(){
        try{
            bg = ImageIO.read(getClass().getResource("Images/background.jpg"));
            hero = ImageIO.read(getClass().getResource("Images/knight.png"));
        }catch(IOException ioe){System.out.println("Unable to open file");}
    }

    @Override public void paintComponent(Graphics g){
        super.paintComponent(g);        
        g.drawImage(bg, 0, 0, bgWidth, bgHeight, null);
        g.drawImage(hero, mouseX-(heroWidth/2), mouseY-(heroHeight/2), heroWidth, heroHeight, null);        
    }

    private class MouseHandler implements MouseMotionListener
    {
        @Override public void mouseMoved(MouseEvent e){
            mouseX = e.getX();
            mouseY = e.getY();
            repaint();
        }
        @Override public void mouseDragged(MouseEvent e){}  
    }
}

A runner class to drive the codes:

class KnightRunner
{   
    public static void main(String[] args){

        SwingUtilities.invokeLater(new Runnable(){
            @Override
            public void run(){
                JFrame frame = new JFrame("Knight Runner");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);       
                frame.add(new DrawingSpace());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);             
            }
        });
    }       
}


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

  • 问题内容: 我有一个正在编写的CSS页面,我需要在一个类中应用背景图像,然后使用另一个类将一个局部透明的背景图像放在已经存在的背景图像之上。这只是一个简单的字眼,所以让我做一个示范。 在此示例中,第一个div应该具有背景图像1,第二个div应该具有背景图像1,但是滤镜图像位于其顶部,然后第三个div应该是图像2,第四个应该是图像2并且上面具有相同的滤镜。 但是,在此示例中,.backgroundF

  • 下面的外部CSS页面示例中的快速简单问题; 我知道它们会影响不同的元素选择器,我的问题是使用背景和背景图像有什么区别?一方可以访问另一方的特定属性吗?谢谢你。

  • 问题内容: 我正在为iOS构建一个简单的ReactNative应用程序,并且试图添加背景图片。似乎没有backgroundImage标签,尽管我确实设法在页面上显示了一次图像,但我无法像使用CSS一样在整个页面上重复该图像。有什么建议? 问题答案: 您不能在React Native中重复像CSS这样的背景图片。但是,您可以通过像

  • 我正在尝试创建背景色CSS3关键帧动画后的第一个动画,这是一个背景图像。我无法创建另一个动画后,文字动画淡出。文本动画褪色后,我想背景的不透明度转到0.3,并再次褪色在文本。下面是我所拥有的。 请在此处查看完整代码:codepen:https://codepen.io/imdaone/pen/jjryyv

  • 问题内容: 假设我要在CSS中渲染箭头,箭头应具有头部,尾部和灵活的宽度,以便可以包含文本。我当然可以创建多个div来获得所需的内容,但是如何在CSS3中完成呢? 我可以使用多个背景图片: 的HTML: 这给了我一个带有箭头和尾巴的透明中间部分。似乎不可能在中间部分指定颜色。 仅使用一张背景图像,您可以执行以下操作: 我知道这在很多方面都是可行的,但是背景颜色属性是否真的从速记定义中丢失了? 问题