wang1421769505 2021-04-16 20:45 采纳率: 66.7%
浏览 313
已采纳

如何在java窗口中连续更换背景图片?

大佬们,我是个新手(纯新手),最近在用JAVA做一个Gglagame,我现在只能做到用更换窗口(关闭旧窗口,打开新的窗口)来替换背景图片。如何做到在一个窗口里连续其显示的图片?

我是定义一个静态变量hitnumber,每点击一次按钮hitnumber++,然后用swtich来更换图片。按钮的事件是类调用自己,以达到重复关闭窗口,打开窗口这样的操作。(打开的时候根据hitnumber的值更新图片)

下面附上自己写的,求求大佬指点一下,一下下都可以的!!!

package sample;

import javax.swing.*;
import java.awt.*;

class GameInterface {

    public static int hitnumber = 0;

    ImageIcon icon = null;

    public void setIcon(ImageIcon icon) {
        this.icon = icon;
    }

    JFrame frame = new JFrame();
    JPanel panel = new JPanel(null);
    JPanel j = (JPanel) frame.getContentPane();
    JButton btn01 = new JButton("NEXT");
    JButton btn02 = new JButton("选项");
    public void GameInterface1() {
        switch (hitnumber) {
            case 1:
                setIcon(new ImageIcon("src/pictures/第一集1.png"));
                break;
            case 2:
                setIcon(new ImageIcon("src/pictures/第一集2.png"));
                break;
            case 3:
                setIcon(new ImageIcon("src/pictures/第一集3.png"));
                break;
            case 4:
                setIcon(new ImageIcon("src/pictures/第一集4.png"));
                break;
            case 5:
                setIcon(new ImageIcon("src/pictures/第一集5.png"));
                break;
            default:setIcon(new ImageIcon("src/pictures/123.jpg"));
                break;
        }
        //将图片放入label中
        JLabel label = new JLabel(icon);
        //设置label的大小
        label.setBounds(0, 0, icon.getIconWidth() - 18, icon.getIconHeight() - 47);
        frame.remove(label);
        frame.add(label);
        //获取窗口的第二层,将label放入
        frame.getLayeredPane().add(label, new Integer(Integer.MIN_VALUE));
        //获取frame的顶层容器,并设置为透明
        j.setOpaque(false);
        //必须设置为透明的。否则看不到图片
        panel.setOpaque(false);
        //窗口设置
        frame.add(panel);
        frame.setSize(icon.getIconWidth(), icon.getIconHeight());
        frame.setVisible(true);
        frame.setResizable(false);//固定窗口大小
        frame.setTitle("四月是你的谎言");//窗口名字
        int windowWidth = frame.getWidth(); // 获得窗口宽
        int windowHeight = frame.getHeight(); // 获得窗口高
        Toolkit kit = Toolkit.getDefaultToolkit(); // 定义工具包
        Dimension screenSize = kit.getScreenSize(); // 获取屏幕的尺寸
        int screenWidth = screenSize.width; // 获取屏幕的宽
        int screenHeight = screenSize.height; // 获取屏幕的高
        frame.setLocation(screenWidth / 2 - windowWidth / 2, screenHeight / 2 - windowHeight / 2);//窗口居中显示
        btn01.setBounds(windowWidth - 68, windowHeight - 97, 50, 50);//下一步按钮
        panel.add(btn01);
        btn02.setBounds(windowWidth - 118, windowHeight - 97, 50, 50);
        panel.add(btn02);
        //按钮事件
        btn01.addActionListener(event -> {
            switch (hitnumber) {
                case 1:
                    Play0 play00 = new Play0("src/music/4秒测试.mp3");
                    play00.start();
                    break;
                case 2:
                    Play0 play01 = new Play0("src/music/5秒测试.mp3");
                    play01.start();
                    break;
            }
            GameInterface vulo4=new GameInterface();//重新执行窗口,更换图片
            vulo4.GameInterface1();
            hitnumber++;
            frame.dispose();
        });
    }
}

按钮按下之后显示的窗口及其中图片。

继上次按钮按过之后显示的窗口及图片。(如上文所说,通过关闭旧窗口,打开新窗口来更新图片)

求求大佬指点一下

 

 

还有个问题:就是这种半透明的显示文字的框java怎么做啊?就文本框只显示在窗口的一部分地方,然后文字也只显示在文本框内。

多谢各位大佬的指点!!!

多谢各位大佬的指点!!!

多谢各位大佬的指点!!!

  • 写回答

4条回答 默认 最新

  • allway2 2021-04-16 21:42
    关注
    package sample;
    
    import javax.imageio.ImageIO;
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import java.awt.BorderLayout;
    import java.awt.Image;
    import java.io.File;
    import java.io.IOException;
    
    public class Main {
    
    	public static void main(String[] args) throws IOException {
    		// TODO Auto-generated method stub
    		JFrame frame = new JFrame();
    		frame.setBounds(0, 0, 852, 576);
    		frame.getContentPane().setLayout(null);
    
    		JLabel label = new JLabel("");
    		label.setBounds(133, 13, 519, 451);
    		frame.getContentPane().add(label);
    
    		String path = "C:\\Login.jpg";
    
    		File file = new File(path);
    		Image image = ImageIO.read(file);
    		label.setIcon(new ImageIcon(image));
    
    		frame.setVisible(true);
    		try {
    			Thread.sleep(1000);
    		} catch (InterruptedException e) {
    			e.printStackTrace();
    		}
    		path = "C:\\LogOff.jpg";
    
    		file = new File(path);
    		image = ImageIO.read(file);
    		label.setIcon(new ImageIcon(image));
    	}
    }
    

    定时更换Lable iconimage

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型