大佬们,我是个新手(纯新手),最近在用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怎么做啊?就文本框只显示在窗口的一部分地方,然后文字也只显示在文本框内。
多谢各位大佬的指点!!!
多谢各位大佬的指点!!!
多谢各位大佬的指点!!!
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
后面的图片看不到,你要不断的改变hitnumber的值,要通过构造函数传值,setIcon是设置窗口图标,内部改变没有用的。
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y