2016-11-27 11 views
1

私はボタンの新しいゲームをクリックした後、現在の出力を配置 クラスを呼び出してみましリセット/新しいゲームクラス内の値をリセットする方法は?

を作成したい、私は私が見つけたプログラムを改造しようとしましたが、私は

を進めるカントクラスをデフォルト値に戻す新しい出力を作成します。 しかし、私はそれを動作させることはできません。ここ

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 


       } 

      }); 
     } 
    }); 
} 

}

+1

ような何かを「しかし、私はそれを動作させるカント」適切な問題の説明ではありません。どのような問題がありますか?コンパイルの問題?次に、コンパイラのエラーを教えてください。あなたのプログラムは実行時にクラッシュしますか?次に、例外スタックトレースとその発生場所のコード行を表示します。あなたのプログラムは何らかの形で不正行為をしていますか?次に、あなたが期待していたこととあなたのプログラムがどこに行ったのかを教えてください。さらに、これはあまりにも多くのコードです。 [MCVE](http://stackoverflow.com/help/mcve)の作成を検討してください。 – Seelenvirtuose

+1

ご覧ください:http://stackoverflow.com/help/how-to-ask – McNets

答えて

0

前のクラスのプロパティをも含めるようにしてください(つまり、あなたが処分しているものである)にある助けてください新しいクラスは、そのようにして、新しいクラスは古いもののように見えますが、デフォルトのプロパティが存在します。

このようなものが私のためになります!

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(); 



    } 

、その後、リセットボタンのActionListenerのために、この

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(); 



    } 
+0

これはありがとうございます。私はこれからアイデアを得て、私の問題を解決してくれてありがとう:) – reck1ess

+0

問題なし@ reck1ess –

関連する問題