LinkFrame.java
上传用户:jennyfly
上传日期:2021-08-10
资源大小:735k
文件大小:5k
- package view;
- import javax.swing.*;
- import model.*;
- import java.awt.event.WindowListener;
- import java.awt.Container;
- import java.awt.Dimension;
- import java.awt.Toolkit;
- import java.util.Observable;
- import java.util.Observer;
- import javax.swing.JFrame; //设置皮肤
- import com.incors.plaf.alloy.AlloyLookAndFeel;
- import control.Control;
- /**
- * 程序的主窗口,引入了一款皮肤
- *
- * @author 何晓飞
- * @version 2.0
- */
- public class LinkFrame extends JFrame implements Observer {
- /* 序列号 */
- private static final long serialVersionUID = 1L;
- /**
- * main函数设置了游戏界面的皮肤,同时创建了一个JFrame 将面板内容植入。 设置了界面 的初始位置和大小以及关闭窗口的方式。
- */
- public static void main(String args[]) {
- setSkin();
- /* 创建一个model对象 */
- Model model = new Model();
- /* 创建一个control对象 */
- Control control = new Control(model);
- /* 创建一个窗口 */
- LinkFrame linkFrame = new LinkFrame(model, control);
- /* 为窗口添加监听 */
- linkFrame.addController(control);
- /* 为窗口添加观察者 */
- model.addObserver(linkFrame);
- // 创建一个dimension对象存储屏幕大小
- Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
- /* 读取窗口位置信息为空则给窗口一个默认的位置 */
- if (model.getLocation() == null)
- linkFrame.setLocation(screenSize.width / 2 - linkFrame.getWidth()
- / 2, screenSize.height / 2 - linkFrame.getHeight() / 2
- - 100);
- else
- /* 不为空的话则按读取的数据设置窗口位置 */
- linkFrame.setLocation(model.getLocation());
- /* 锁定窗口 */
- linkFrame.setResizable(false);
- /* 关闭窗口方式 */
- linkFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- /* 自动调整各组件 */
- linkFrame.pack();
- /* 设置可见 */
- linkFrame.setVisible(true);
- }
- /**
- * 设置皮肤
- */
- private static void setSkin() {
- try {
- // 引入外部皮肤并设置为游戏的皮肤
- AlloyLookAndFeel.setProperty("alloy.isSandbox", "true");
- AlloyLookAndFeel.setProperty("alloy.isLookAndFeelFrameDecoration",
- "true");
- UIManager.setLookAndFeel("com.incors.plaf.alloy.AlloyLookAndFeel");
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /* 选项面板也是程序的初始界面 */
- Model model;
- Control control;
- private OptionBoard ob;
- private PlayBoard pb;
- private Container c;
- /**
- * Login 的构造函数
- *
- * @param content
- * initPanel实例
- * @param loginSound
- * sound实例
- */
- public LinkFrame(Model model, Control control) {
- /* 标题 */
- super("连 连 看");
- /* 大小 */
- setSize(820, 553);
- /* 窗口关闭方式 */
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- this.model=model;
- this.control=control;
- ob=new OptionBoard();
- ob.addController(control);
- pb=new PlayBoard(model);
- pb.addController(control);
- /* 为面板添加观察者 */
- model.addObserver(pb);
- c=this.getContentPane();
- c.add(pb);
- c.add(ob);
- turnTo("ob");
- }
- /**
- * 为程序添加监听器
- *
- * @param obj
- * 一个监听器对象
- */
- public void addController(Object obj) {
- if (obj instanceof WindowListener) {
- addWindowListener((WindowListener) obj);
- }
- }
- private void turnTo(String name) {
- if(name.equals("pb")){
- ob.setVisible(false);
- pb.setVisible(true);
- }
- else if(name.equals("ob")){
- pb.setVisible(false);
- ob.setVisible(true);
- model.IsPlaying=false;
- }
- c=getContentPane();
- c.repaint();
- }
- /**
- * 对所有与切换界面有关的消息进行响应
- */
- public void update(Observable obs, Object obj) {
- if(obj instanceof String){
- String notice=(String)obj;
- if(notice.equals("enter")){
- model.restartGame();
- turnTo("pb");
- }
- else if(notice.equals("load")){
- State s=model.loadGameData();
- if(s!=null){
- int level=s.getLevel();
- int response = JOptionPane
- .showConfirmDialog(null, "上次保存的是第" + level + "关,确定要继续吗?",
- " 请 确 认", JOptionPane.YES_NO_OPTION,
- JOptionPane.QUESTION_MESSAGE);
- if (response == JOptionPane.YES_OPTION) {
- model.setPictureFile(s.getPictureFile());
- model.setMusic(s.getGameMusic());
- model.setLevel(level);
- model.setCurrentScore(s.getScore());
- model.setLastScore(s.getScore());
- model.loadGame();
- turnTo("pb");
- }
- } else {
- JOptionPane.showMessageDialog(null, "无存档游戏!");
- }
- }
- else if(notice.equals("cancel")){
- int response = JOptionPane.showConfirmDialog(null, "真的要退出吗?",
- " 请 确 认", JOptionPane.YES_NO_OPTION,
- JOptionPane.QUESTION_MESSAGE);
- if (response == JOptionPane.YES_OPTION) {
- System.exit(0);
- }
- }
- else if(notice.equals("back")){
- turnTo("ob");
- }
- }
- }
- }