Java 如何重置类中的值?

Java 如何重置类中的值?,java,swing,class,jframe,Java,Swing,Class,Jframe,我试图改造一个我发现的程序,但我无法继续 我想创建一个重置/新游戏 我试着给全班同学打电话 单击“新建游戏”按钮并创建新输出后,处理当前输出,使类返回默认值。 但是我不能让它工作。请帮忙 public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { Puzzle_Act3

我试图改造一个我发现的程序,但我无法继续

我想创建一个重置/新游戏

我试着给全班同学打电话 单击“新建游戏”按钮并创建新输出后,处理当前输出,使类返回默认值。 但是我不能让它工作。请帮忙

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {

        @Override
        public void run() {
            Puzzle_Act3 puzzle = new Puzzle_Act3();

            puzzle.setVisible(true);

            newGameBut.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                   puzzle.dispose();
                   puzzle = new Puzzle_Act3(); //********************************************how to make this work
                   puzzle.setVisible(true); //********************************become new again


                }

            });
        }
    });
}
这是完整的代码

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.awt.image.CropImageFilter;
import java.awt.image.FilteredImageSource;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.AbstractAction;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

class MyButton extends JButton {

private boolean isLastButton;

public MyButton() {

    super();

    initUI();
}

public MyButton(Image image) {

    super(new ImageIcon(image));

    initUI();
}

private void initUI() {

    isLastButton = false;
    BorderFactory.createLineBorder(Color.LIGHT_GRAY);

    addMouseListener(new MouseAdapter() {

        @Override
        public void mouseEntered(MouseEvent e) {
            setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY));
        }

        @Override
        public void mouseExited(MouseEvent e) {
            setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY));
        }
    });
}

public void setLastButton() {

    isLastButton = true;
}

public boolean isLastButton() {

    return isLastButton;
}
}

public class Puzzle_Act3 extends JFrame {

private JPanel panel;                                                       // Init
private BufferedImage source;
private ArrayList<MyButton> buttons;
ArrayList<Point> solution = new ArrayList();
private Image image;
private MyButton lastButton;
private int width, height;
private final int DESIRED_WIDTH = 310;
private BufferedImage resized;

JPanel controlPanel;
JLabel display;                                                             //try init
static JButton newGameBut;

public Puzzle_Act3() {

    initUI();
}

private void initUI() {

    solution.add(new Point(0, 0));
    solution.add(new Point(0, 1));
    solution.add(new Point(0, 2));
    solution.add(new Point(1, 0));
    solution.add(new Point(1, 1));
    solution.add(new Point(1, 2));
    solution.add(new Point(2, 0));
    solution.add(new Point(2, 1));
    solution.add(new Point(2, 2));
    solution.add(new Point(3, 0));
    solution.add(new Point(3, 1));
    solution.add(new Point(3, 2));

    buttons = new ArrayList();

    panel = new JPanel();
    panel.setBorder(BorderFactory.createLineBorder(Color.ORANGE));
    add(Box.createRigidArea(new Dimension(0, 25)), BorderLayout.NORTH); 
    panel.setLayout(new GridLayout(4, 3, 0, 0));                            //setPanel();



                                                                            //insert
    newGameBut = new JButton("new game");                                   //new game/reset
    controlPanel = new JPanel();
    controlPanel.setLayout(new FlowLayout());
    display = new JLabel("move: "+ count);
    controlPanel.add(display);
    controlPanel.add(newGameBut);
    this.setLayout(new BorderLayout());
    this.add(controlPanel, BorderLayout.NORTH); 



    try {
        source = loadImage();
        int h = getNewHeight(source.getWidth(), source.getHeight());
        resized = resizeImage(source, DESIRED_WIDTH, h,
                BufferedImage.TYPE_INT_ARGB);

    } catch (IOException ex) {
        Logger.getLogger(Puzzle_Act3.class.getName()).log(
                Level.SEVERE, null, ex);
    }

    width = resized.getWidth(null);
    height = resized.getHeight(null);

    add(panel, BorderLayout.CENTER);

    for (int i = 0; i < 4; i++) {                                           //column

        for (int j = 0; j < 3; j++) {                                       //row

            image = createImage(new FilteredImageSource(resized.getSource(),
                    new CropImageFilter(j * width / 3, i * height / 4,
                            (width / 3), height / 4)));
            MyButton button = new MyButton(image);
            button.putClientProperty("position", new Point(i, j));

            if (i == 3 && j == 2) {
                lastButton = new MyButton();
                lastButton.setBorderPainted(false);
                lastButton.setContentAreaFilled(false);
                lastButton.setLastButton();
                lastButton.putClientProperty("position", new Point(i, j));
            } else {
                buttons.add(button);
            }
        }
    }

    Collections.shuffle(buttons);
    buttons.add(lastButton);

    for (int i = 0; i < 12; i++) {

        MyButton btn = buttons.get(i);
        panel.add(btn);
        btn.setBorder(BorderFactory.createLineBorder(Color.gray));
        btn.addActionListener(new ClickAction());
    }

    pack();
    setTitle("Puzzle - ccuison");
    setResizable(false);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

private int getNewHeight(int w, int h) {

    double ratio = DESIRED_WIDTH / (double) w;
    int newHeight = (int) (h * ratio);
    return newHeight;
}

private BufferedImage loadImage() throws IOException {

    BufferedImage bimg = ImageIO.read(new File("myArtWork.png"));

    return bimg;
}

private BufferedImage resizeImage(BufferedImage originalImage, int width,
        int height, int type) throws IOException {

    BufferedImage resizedImage = new BufferedImage(width, height, type);
    Graphics2D g = resizedImage.createGraphics();
    g.drawImage(originalImage, 0, 0, width, height, null);
    g.dispose();

    return resizedImage;
}
 int count;


private class ClickAction extends AbstractAction {


    @Override

    public void actionPerformed(ActionEvent e) {                            //Clicks 
        count = count+1;
        display.setText("move: "+count);
        System.out.println(count);
        checkButton(e);
        checkSolution();
    }

    private void checkButton(ActionEvent e) {

        int lidx = 0;
        for (MyButton button : buttons) {
            if (button.isLastButton()) {
                lidx = buttons.indexOf(button);

            }
        }

        JButton button = (JButton) e.getSource();
        int bidx = buttons.indexOf(button);

        if ((bidx - 1 == lidx) || (bidx + 1 == lidx)
                || (bidx - 3 == lidx) || (bidx + 3 == lidx)) {
            Collections.swap(buttons, bidx, lidx);



            updateButtons();
        }

    }

    private void updateButtons() {

        panel.removeAll();

        for (JComponent btn : buttons) {

            panel.add(btn);
        }

        panel.validate();
    }
}

private void checkSolution() {

    ArrayList<Point> current = new ArrayList();

    for (JComponent btn : buttons) {
        current.add((Point) btn.getClientProperty("position"));
    }

    if (compareList(solution, current)) {                                   //WIN
        JOptionPane.showMessageDialog(panel, "Finished",
                "Congratulation", JOptionPane.INFORMATION_MESSAGE);
        Puzzle_Act3 puzzle = new Puzzle_Act3();
        puzzle.dispose();
        puzzle.setVisible(true);
    }
}


public static boolean compareList(List ls1, List ls2) {
    return ls1.toString().contentEquals(ls2.toString());
}

public static void main(String[] args) {

    EventQueue.invokeLater(new Runnable() {

        @Override
        public void run() {
            Puzzle_Act3 puzzle = new Puzzle_Act3();

            puzzle.setVisible(true);

            newGameBut.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                   puzzle.dispose();
                   puzzle = new Puzzle_Act3(); //********************************************how to make this work
                   puzzle.setVisible(true); //********************************become new again


                }

            });
        }
    });
}
导入java.awt.BorderLayout;
导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.EventQueue;
导入java.awt.FlowLayout;
导入java.awt.Graphics2D;
导入java.awt.GridLayout;
导入java.awt.Image;
导入java.awt.Point;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.MouseAdapter;
导入java.awt.event.MouseEvent;
导入java.awt.image.buffereImage;
导入java.awt.image.CropImageFilter;
导入java.awt.image.FilteredImageSource;
导入java.io.File;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.Collections;
导入java.util.List;
导入java.util.logging.Level;
导入java.util.logging.Logger;
导入javax.imageio.imageio;
导入javax.swing.AbstractAction;
导入javax.swing.BorderFactory;
导入javax.swing.Box;
导入javax.swing.ImageIcon;
导入javax.swing.JButton;
导入javax.swing.JComponent;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JOptionPane;
导入javax.swing.JPanel;
类MyButton扩展了JButton{
私有布尔isLastButton;
公共MyButton(){
超级();
initUI();
}
公共MyButton(图像){
超级(新图像图标(图像));
initUI();
}
私有void initUI(){
isLastButton=false;
BorderFactory.createLineBorder(颜色:浅灰色);
addMouseListener(新的MouseAdapter(){
@凌驾
公共无效鼠标事件(鼠标事件e){
SetBordOrder(BorderFactory.createLineBorder(颜色:深灰色));
}
@凌驾
公共无效mouseExited(MouseEvent e){
setboorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY));
}
});
}
公共void setLastButton(){
isLastButton=true;
}
公共布尔isLastButton(){
返回按钮;
}
}
公共类拼图_Act3扩展了JFrame{
专用JPanel面板;//初始化
专用缓冲图像源;
私有数组列表按钮;
ArrayList解决方案=新建ArrayList();
私有图像;
私人MyButton lastButton;
私人int宽度、高度;
专用最终int所需_宽度=310;
私有缓冲区图像大小调整;
JPanel控制面板;
JLabel display;//尝试初始化
静态JButton-newGameBut;
公众谘询行动3(){
initUI();
}
私有void initUI(){
添加(新点(0,0));
添加(新的点(0,1));
添加(新的点(0,2));
添加(新的点(1,0));
添加(新的点(1,1));
添加(新的点(1,2));
添加(新的点(2,0));
添加(新的点(2,1));
添加(新的点(2,2));
添加(新的点(3,0));
添加(新的点(3,1));
添加(新的点(3,2));
按钮=新的ArrayList();
panel=新的JPanel();
panel.setOrder(BorderFactory.createLineBorder(Color.ORANGE));
添加(Box.createRigidArea(新维度(0,25)),BorderLayout.NORTH);
setLayout(新的GridLayout(4,3,0,0));//setPanel();
//插入
newGameBut=newjbutton(“新游戏”);//新游戏/重置
控制面板=新的JPanel();
setLayout(新的FlowLayout());
显示=新的JLabel(“移动:+计数”);
控制面板。添加(显示);
添加(newGameBut);
此.setLayout(新的BorderLayout());
添加(控制面板,BorderLayout.NORTH);
试一试{
source=loadImage();
inth=getNewHeight(source.getWidth(),source.getHeight());
调整大小=调整图像大小(源,所需宽度,h,
BuffereImage.TYPE_INT_ARGB);
}捕获(IOEX异常){
Logger.getLogger(Puzzle_Act3.class.getName()).log(
级别(严重、空、ex);
}
宽度=已调整大小。getWidth(null);
高度=已调整大小。getHeight(null);
添加(面板、边框布局、中心);
对于(inti=0;i<4;i++){//列
对于(int j=0;j<3;j++){//行
image=createImage(新的FilteredImageSource(已调整大小的.getSource()),
新CropImageFilter(j*宽度/3,i*高度/4,
(宽/3,高/4),;
MyButton button=新建MyButton(图像);
putClientProperty(“位置”,新点(i,j));
如果(i==3&&j==2){
lastButton=newmybutton();
lastButton.exe(假);
lastButton.setContentAreaFilled(false);
setLastButton();
putClientProperty(“位置”,新点(i,j));
}否则{
按钮。添加(按钮);
}
}
}
收藏。洗牌(按钮);
按钮。添加(lastButton);
对于(int i=0;i<12;i++){
MyButton btn=按钮。获取(i);
面板。添加(btn);
btn.setboorder(BorderFactory.createLineBorder(Color.gray));
添加ActionListener(新建ClickAction());
}
包装();
片名(“拼图-ccuison”);
可设置大小(假);
setLocationRelativeTo(空);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
私有整数getNewHeight(整数w,整数h){
倍率=所需的宽度/(双)w;
int新高度=(int)(h*比率);
返回新高度;
}
private BuffereImage loadImage()引发IOException{
BuffereImage bimg=ImageIO.read(新文件(“myArtWork.png”);
返回bimg;
}
public class Welcome {

    static GUI run = new GUI ();


    public static void main (String [] args) {


        run.setPreferredSize(new Dimension(800, 500));
        run.setResizable(false);
        run.setVisible(true);
        run.setLocation(250,150);
        run.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);


        ImageIcon img = new ImageIcon("C:/Users/hp/documents/MyLogo.png");
        run.setIconImage(img.getImage());
        run.setTitle( "Pearl Math-Whiz");
        run.pack();



    }
 run.dispose();
        GUI ran = new GUI();
        ran.setPreferredSize(new Dimension(800, 500));
        ran.setResizable(false);
        ran.setVisible(true);
        ran.setLocation(250,150);
        ran.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);


        ImageIcon img = new ImageIcon("C:/Users/hp/documents/MyLogo.png");
        ran.setIconImage(img.getImage());
        ran.setTitle( "Pearl Math-Whiz");
        ran.pack();



    }