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

📄 mainframe.java

📁 用eclipse编的游戏___连连看,是参加大学生编程竞赛的作品.
💻 JAVA
字号:
package view;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;//Dimension 类封装单个对象中组件的宽度和高度(精确到整数)。该类与组件的某个属性关联
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.Toolkit;//Toolkit 的子类被用于将各种组件绑定到特定本机工具包实现。 

import java.awt.event.ActionListener;
import java.awt.event.MouseListener;
import java.awt.event.WindowListener;
import java.util.ArrayList;//List 接口的大小可变数组的实现
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;//UIManager 管理当前外观、可用外观集合、外观更改时被通知

import model.Model;

import control.Control;
//extends:继承;implment:实现接口实现多继承
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, "www.wenbing4375@sina.com.cn(邮箱)\n欢迎提供宝贵意见!!!!\n邮编:230037", "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 + -