JFrame的JButton点击事件无法正确显示另外的界面 5C

网上找了个程序,自己改,是一个小游戏,本来只有一个游戏界面,我想添加一个登录页面,结果就刚加了个界面就卡住了。从Fishlord类中使用main()函数可以正确显示,但是通过另外一个JFrame通过JButton点击事件调用Fishlord时无法显示,而且连右上角的关闭按钮都不能点击! 代码在下面:
这个界面有按钮,点击按钮跳转到下面那个iframe,在JButton点击事件里使用new的方法

package fishhh;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

public class Login {

private static JFrame frame;
public static void main(String[] args) throws Exception {
    // 窗体大小
    frame = new JFrame();
    frame.setSize(800, 480);
    frame.setLayout(null);//设置布局管理器为空
    JButton button = new JButton("登     录");
    button.setBounds(new Rectangle(280, 210, 220, 30));//参数分别是坐标x,y,宽,高
    frame.add(button);
    JTextField tfUser = new JTextField();
    tfUser.setBounds(new Rectangle(280, 140, 220, 25));
    frame.add(tfUser);
    JPasswordField tfPwd = new JPasswordField();
    tfPwd.setBounds(new Rectangle(280, 170, 220, 25));
    frame.add(tfPwd);
    // 显示窗体
    frame.setVisible(true);
    ImageIcon img = new ImageIcon("bg.jpg");// 这是背景图片
    JLabel imgLabel = new JLabel(img);// 将背景图放在标签里。
    frame.getLayeredPane().add(imgLabel, new Integer(Integer.MIN_VALUE));
    imgLabel.setBounds(0, 0, frame.getWidth(), frame.getHeight());
    Container cp = frame.getContentPane();
    cp.setLayout(null);
    ((JPanel) cp).setOpaque(false); // 这样就能显示出背景图片出来了
    button.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
          //创建新的窗口
            frame.setVisible(false);
                try {
                    new Fishlord();
                } catch (Exception e1) {
                    e1.printStackTrace();
                }
        }
    });
}

public void close(){
    frame.dispose();
}

}

跳转到这个界面
package fishhh;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Fishlord {

public static void main(String[] args) throws Exception {
    new Fishlord();
}

public Fishlord() throws Exception{
    JFrame frame = new JFrame("捕鱼达人");
    Pool pool = new Pool();
    frame.add(pool);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 关闭窗口时关闭程序
    frame.setSize(800, 480);
    frame.setLocationRelativeTo(null);// 设置窗口居中,必须放在setSize之后
    frame.setResizable(false);// 不允许用户改变窗口大小
    frame.setVisible(true);
    pool.action();
}

}

class Pool extends JPanel {
BufferedImage background = null;
Fish fish = null;;
Fish[] fishs = new Fish[9];
Net net = null;
int score = 0;
int fontsize = 20;
Font font = new Font("楷体", Font.BOLD, fontsize);

Pool() throws IOException {
    // background = ImageIO.read(new File("bg.jpg")); //读取工程目录图片
    background = ImageIO.read(getClass().getResourceAsStream("/images/bg.jpg"));
    /**
     * 1)getClass().getResourceAsStream()方法读取的是src/images包下的图片 2)background
     * = ImageIO.read(new File("images/bg.jpg"));
     * 这个方法读取的是工程CatchFish/images文件夹下的图片
     */

    for (int i = 0; i < 9; i++) {
        fish = new Fish("fish0" + (i + 1));
        fishs[i] = fish;
        fish.start();
    }
}

public void paint(Graphics g) { // paint什么时候调用?
    // System.out.println("paint");
    g.drawImage(background, 0, 0, null);
    for (int i = 0; i < fishs.length; i++) {
        Fish tempfish = fishs[i];
        g.drawImage(tempfish.fishimage, tempfish.x, tempfish.y, null);
    }
    if (net.show) {
        g.drawImage(net.netimage, net.x - net.width / 2, net.y - net.height
                / 2, null);
    }
    g.setFont(font);
    g.setColor(Color.white);
    g.drawString("SCORE:", 10, 20);
    g.setColor(Color.red);
    g.drawString("      " + score, 10, 20);
}

public void action() throws Exception {

    net = new Net();

    MouseAdapter m = new MouseAdapter() {
        public void mouseEntered(MouseEvent e) {
            net.show = true;
        }

        public void mouseExited(MouseEvent e) {
            net.show = false;
        }

        // 在鼠标移动时候执行
        public void mouseMoved(MouseEvent e) {
            // MouseEvent 鼠标事件:鼠标事件发生时间地点人物
            long time = e.getWhen();
            int x = e.getX();
            int y = e.getY();

            // Object o=e.getSource();//发生事件的物体pool
            net.x = x;
            net.y = y;
        }

        public void mousePressed(MouseEvent e) {
            catchFish();// catch:抓鱼 在鼠标按下的时候,进行抓鱼操作
        }

    };
    // 在当前方法中代表当前的 这个(this)pool对象
    this.addMouseListener(m); // 处理这个pool对象鼠标动作
    this.addMouseMotionListener(m);
    net.show = true;// 调试代码

    while (true) {
        // System.out.println("repaint");
        repaint();
        try {
            Thread.sleep(80);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

protected void catchFish() {
    // 鱼在不在网的范围内?在的话就让鱼消失
    for (int i = 0; i < fishs.length; i++) {
        fish = fishs[i];
        if (fish.contains(net.x, net.y)) {// 判断在不在网的范围
            fish.getOut();
            score += fish.width / 10;
        }
    }
}

}

class Fish extends Thread {
int x, y, index = 0, width, height, step;

BufferedImage fishimage;
BufferedImage[] fishimages = new BufferedImage[9];
Random r;

Fish(String fishname) throws IOException {
    // System.out.println("Fish()");
    for (int i = 0; i < 9; i++) {
        // BufferedImage tempfishimage = ImageIO.read(new File(fishname +
        // "_0"
        // + (i + 1) + ".png"));
        BufferedImage tempfishimage = ImageIO.read(getClass()
                .getResourceAsStream(
                        "/images/" + fishname + "_0" + (i + 1) + ".png"));
        fishimages[i] = tempfishimage;
    }
    fishimage = fishimages[index];
    r = new Random();// 不写数字表示的是int范围内的一个数字
    width = fishimage.getWidth();
    height = fishimage.getHeight();
    x = 790;
    y = r.nextInt(470 - height);
    step = r.nextInt(4) + 1;
}

public void run() {
    while (true) {
        try {
            Thread.sleep(50);
            index++;
            fishimage = fishimages[index % fishimages.length];
            // 现在要动,所以要改变图片?300
            x = x - step;
            if (x <= 0 || y <= 0 || y >= 480)
                getOut();
        } catch (Exception e) {
        }
    }
}

// 检查(netx,nety)的坐标是否在鱼的范围之内
public boolean contains(int netx, int nety) {
    int dx = netx - x;
    int dy = nety - y;
    return dx >= 0 && dx <= width && dy >= 0 && dy <= height;
}

void getOut() {
    Random r = new Random();
    x = 790;
    y = r.nextInt(470 - height);
    step = r.nextInt(4) + 1;
}

}

class Net {
// 网的位置随着鼠标指针的移动而移动
BufferedImage netimage = null;
int x = 0, y = 0, width, height;
boolean show;// 是否显示当前网对象

Net() throws Exception {
    // netimage = ImageIO.read(new File("net09.png"));

    netimage = ImageIO.read(getClass().getResourceAsStream(
            "/images/net09.png"));
    show = false;
    width = netimage.getWidth();
    height = netimage.getHeight();
}

}

1个回答

Fishlord类直接extends JFrame,试试

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!

相似问题

3
关于的鼠标监听器和textarea的问题
2
初学者请问关于Java GUI的问题
1
Swing里为什么纵向的Box对象中嵌套一个横向的Box对象就会无法对齐?
1
JFrame窗体中不显示组建,我的代码完全是书上的代码,但是运行之后就是不显示?求大佬给看一下哪里出问题了
0
用JFrame如何实现小球移动并且能访问setsize之外的坐标
1
为什么对容器用了绝对布局之后组件显示不出来,取消容器绝对布局而对窗体用绝对布局就显示出来
2
java简易计算器实现,添加能够切换简易计算器和科学计算器的按键。
1
Java 新手 Gui JButton添加进JFrame报错
2
关于Java图形化界面里读取txt信息问题
1
Java CAD导出为DXF文件,出现中文乱码,有用过的请驻脚解答下哦。
1
菜鸟求助,界面之间的切换,谢谢
0
java为什么使用等待语句后弹出的窗口组件都不显示了?
1
求助关于JAVA JFrame中添加按钮之后删除按钮的问题。。
1
关于Java中JFrame继承的问题
1
Java题,编写一个JFrame窗口.......救救猫咪.jpg
0
Linux下运行JFrame程序,报java.lang.UnsupportedOperationException(当前系统不支持系统托盘),怎么解决
1
JAVA的Jframe图标怎么修改
1
求助:Java图形界面 为什么这段代码不用继承JFrame类
2
eclipse运行swing和生成的jar运行效果不同,jar运行时背景不能显示
2
我swing了一个登陆界面,在eclipse中运行时显示正常,但是生成jar并运行jar后,背景不显示。