⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainframe.java

📁 该代码功能:用Java实现的很可爱的连连看小游戏
💻 JAVA
字号:
package view;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.ActionListener;
import java.awt.event.MouseListener;
import java.awt.event.WindowListener;
import java.util.ArrayList;
import java.util.Observable;
import java.util.Observer;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.UIManager;

import model.Model;
import control.Control;

public class MainFrame extends JFrame implements Observer {

	private static final long serialVersionUID = 1L;

	public static void main(String[] args) {
		try {
			UIManager
			.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");

		} catch (Exception e) {
			e.printStackTrace();
		}
		Model model = new Model();
		MainFrame frame = new MainFrame(model);
		model.addObserver(frame);
		Control control = new Control(model);
		frame.addController(control);

	}

	private JButton btnAbout;

	private JButton btnStart, btnRefresh, btnRemind, btnDemo;

	private Container c = this.getContentPane();

	private JComboBox cboLevel;

	private GamePanel gPanel;

	private JLabel lblHistory;

	private JLabel lblLeave;

	private JLabel lblTimer;

	private Model model;

	private JPanel setPanel;

	private JPanel statPanel;

	private JPanel toolPanel;

	public MainFrame(Model model) {
		this.model = model;

		initComponents();

		setPanel.add(btnAbout);
		setPanel.add(new JLabel("等级"));
		setPanel.add(cboLevel);

		statPanel.add(lblTimer);
		statPanel.add(lblLeave);
		statPanel.add(lblHistory);

		toolPanel.add(btnStart);
		toolPanel.add(btnRefresh);
		toolPanel.add(btnRemind);
		toolPanel.add(btnDemo);
		setSize(740, 510);
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
		if (model.getLocation() == null)
			setLocation(screenSize.width / 2 - getWidth() / 2,
					screenSize.height / 2 - getHeight() / 2 - 100);
		else
			setLocation(model.getLocation());
		setResizable(false);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		c.setLayout(new BorderLayout());
		c.add(setPanel, BorderLayout.NORTH);
		c.add(toolPanel, BorderLayout.EAST);
		c.add(gPanel, BorderLayout.CENTER);
		c.add(statPanel, BorderLayout.SOUTH);
		try {
			setCursor(Toolkit.getDefaultToolkit().createCustomCursor(
					ImageLoader.getCursorImage(), new Point(0, 0), "cursor"));
		} catch (Exception e) {
			e.printStackTrace();
		}
		setVisible(true);
	}

	public void addController(Object obj) {
		if (obj instanceof MouseListener) {
			gPanel.addMouseListener((MouseListener) obj);
		}
		if (obj instanceof ActionListener) {
			ActionListener al = (ActionListener) obj;
			cboLevel.addActionListener(al);
			btnAbout.addActionListener(al);
			btnStart.addActionListener(al);
			btnRefresh.addActionListener(al);
			btnRemind.addActionListener(al);
			btnDemo.addActionListener(al);
		}
		if (obj instanceof WindowListener) {
			addWindowListener((WindowListener) obj);
		}
	}

	private void initComponents() {

		cboLevel = new JComboBox();
		cboLevel.addItem("随机");
		for (int i = 1; i <= 9; i++) {
			cboLevel.addItem(i + "");
		}
		cboLevel.setSelectedItem(model.getLevel() + "");
		btnAbout = new JButton("About");
		lblTimer = new JLabel();
		lblLeave = new JLabel();
		lblHistory = new JLabel();
		lblHistory.setForeground(Color.BLUE);

		btnStart = new JButton("开始");
		btnStart.setActionCommand("start");
		btnRefresh = new JButton("刷新");
		btnRefresh.setActionCommand("refresh");
		btnRemind = new JButton("提示");
		btnRemind.setActionCommand("remind");
		btnDemo = new JButton("演示");
		btnDemo.setActionCommand("demo");
		gPanel = new GamePanel(model);

		setPanel = new JPanel();
		setPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
		toolPanel = new JPanel();
		toolPanel.setLayout(new GridLayout(7, 1, 0, 20));
		toolPanel.setPreferredSize(new Dimension(80, 100));

		statPanel = new JPanel();
		statPanel.setLayout(new GridLayout(1, 4));
	}

	private void showAbout() {
		JOptionPane.showMessageDialog(this, "xuoogle@gmail.com", "About",
				JOptionPane.INFORMATION_MESSAGE, new ImageIcon(ImageLoader
						.getIconImage()));
	}

	public void update(Observable obs, final Object obj) {
		if (obj instanceof ArrayList) {
			gPanel.showPath(obj);
		} else if (obj instanceof String) {
			if (obj.equals("timer")) {
				lblTimer.setText("所用时间" + model.getSeconds() + "秒");
				lblLeave.setText("剩余:" + model.getLeave() + "个" + " 本轮可消除"
						+ model.solutionCount() + "对");
				lblHistory.setText("历史纪录" + model.getHistoryRecord() + "秒");
			} else if (obj.equals("breakrecord")) {
				JOptionPane.showMessageDialog(this, "恭喜打破纪录!" + "\n原来纪录:"
						+ model.getHistoryRecord() + "秒" + "\n你用时间:"
						+ model.getSeconds() + "秒");
			} else if (obj.equals("demofinished")) {
				JOptionPane.showMessageDialog(this, "演示完成!");
				btnDemo.setText("演示");
			} else if (obj.equals("finished")) {
				lblLeave.setText("完成");
			} else if (obj.equals("nosolution")) {
				JOptionPane.showMessageDialog(this, "无解!确定后自动刷新.");
			} else if (obj.equals("about")) {
				showAbout();
			}
		} else {
			repaint();
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -