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