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

📄 emulatorframe.java

📁 J2me唆哈的代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
 * Created on 2005-9-20 by pcy
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package a.a.a.b;

import java.awt.*;
import java.awt.dnd.*;
import java.awt.datatransfer.*;
import java.awt.event.*;

import javax.imageio.*;
import javax.swing.*;

import java.io.*;
import java.util.*;

import a.a.a.midp.lcdui.*;
import javax.microedition.midlet.*;

import com.booqio.emulator.Emulator;


public class EmulatorFrame extends JFrame implements MIDletManager{
    
    public static final long serialVersionUID=1;
    
    private static final int MENU_BAR_HEIGHT=20;

    private int deviceType;
    private int deviceWidth;
    private int deviceHeight;
    private int screenOffsetX;
    private int screenOffsetY;
    private int screenWidth;
    private int screenHeight;
    private DevicePanel devicePanel;
    private BQDisplayable screenPanel;
    private e emuParam;
    
    private JFileChooser openFileChooser;
    private JFileChooser setSnapDirChooser;
    private String openDir;
    private String snapDir;
    
    private BQImage iconImage;
    
    //public static boolean _DEBUG;
    public static EmulatorFrame instance;
    
    private GameThread gameThread;
    private GameThreadGroup gameThreadGroup;
    
    private boolean finishInit; 
    
    //private boolean language;
    private SimpleConsole console;
    private boolean showConsole;
    
    private ZoomWindow zoomWindow;
    private int zoom;
    
    private String title=e.getString("Title",e.TYPE_OTHER);
    
    private EmulatorFrame(int _deviceType){
        super();
        emuParam=e.getInstance(this);
        finishInit=false;
        loadConfig();
        if(_deviceType>0){
        	deviceType=_deviceType;
        }else if(deviceType==0){
        	deviceType=Emulator.NOKIA_N7210;
        }
        emuParam.changeDeviceType(deviceType);
        screenWidth=emuParam.getScreenWidth();
        screenHeight=emuParam.getScreenHeight();
        init();
        console=new SimpleConsole(this);
        Point pt=this.getLocation();
        console.setLocation(pt.x-300,pt.y);
        console.pack();
        //System.setOut(new PrintStream(console.getOutputStream()));
        try{
        	Thread thd=new Thread(console);
        	thd.start();
        }catch(Exception exp){
        	exp.printStackTrace();
        }

        if(zoom!=0){
        	zoomWindow=new ZoomWindow(this);
        	zoomWindow.setSize(emuParam.getScreenWidth()*zoom,emuParam.getScreenHeight()*zoom);
	    	Rectangle rc=this.getBounds();
	    	zoomWindow.setLocation(rc.x+rc.width,rc.y);
	    	zoomWindow.setZoom(zoom);
	    	zoomWindow.setVisible(true);
        }
        finishInit=true;
        this.setResizable(false);
        this.pack();
        this.setVisible(true);
        console.setVisible(showConsole);

    }
    
    private void init(){
        initTitleBar();
        createMenuBar();
        changeDevice(emuParam.getCurrentDevice());
        initFileChoosers();
        setEventHandle();
        updateUI();
    }
    
    private void initTitleBar(){
        this.setTitle(title);
        iconImage=emuParam.getIconImage();
        this.setIconImage(iconImage.getTrueImage());
    }
    
    private void createMenuBar(){
        JMenuBar jmb=new JMenuBar();
        jmb.setBounds(0,0,10,MENU_BAR_HEIGHT);
        jmb.add(createFileMenu());
        jmb.add(createOptionMenu());
        jmb.add(createDeviceMenu());
        jmb.add(createHelpMenu());
        this.setJMenuBar(jmb);
    }
    
    private JMenu createFileMenu(){
    	JMenu menu=new JMenu(e.getString("File",e.TYPE_MENU));
    	JMenuItem openMenu=new JMenuItem(e.getString("Open",e.TYPE_MENU));
    	openMenu.addActionListener(new ActionListener(){
    		public void actionPerformed(ActionEvent e){
    			openFile();
    		}
    	});
    	menu.add(openMenu);
    	JMenuItem exitMenu=new JMenuItem(e.getString("Exit",e.TYPE_MENU));
    	exitMenu.addActionListener(new ActionListener(){
    		public void actionPerformed(ActionEvent e){
    			exitEmulator();
    		}
    	});
    	menu.add(exitMenu);
    	return menu;
    }

    private JMenu createOptionMenu(){
    	JMenu menu=new JMenu(e.getString("Option",e.TYPE_MENU));
    	
    	/*JMenuItem lan=new JMenuItem(e.getString("Lan"));
    	lan.addActionListener(new ActionListener(){
    		public void actionPerformed(ActionEvent evt){
    			language=!language;
    		}
    	});*/
    	
    	JMenuItem setkey=new JMenuItem(e.getString("SetKey",e.TYPE_MENU));
    	setkey.addActionListener(new ActionListener(){
    		public void actionPerformed(ActionEvent e){
    			showSetKeyDialog();
    		}
    	});
    	menu.add(setkey);
    	
    	JMenuItem setsnap=new JMenuItem(e.getString("SnapDir",e.TYPE_MENU));
    	setsnap.addActionListener(new ActionListener(){
    		public void actionPerformed(ActionEvent e){
    			setSnapDir();
    		}
    	});
    	menu.add(setsnap);
    	
    	JCheckBoxMenuItem con=new JCheckBoxMenuItem(e.getString("Console",e.TYPE_MENU));
    	con.addActionListener(new ActionListener(){
    		public void actionPerformed(ActionEvent e){
    			showConsole=!showConsole;
    			console.setVisible(showConsole);
    			((JCheckBoxMenuItem)e.getSource()).setSelected(showConsole);
    		}
    	});
    	con.setSelected(showConsole);
    	menu.add(con);
    	
    	JMenu zoommenu=new JMenu(e.getString("Zoom",e.TYPE_MENU));
    	ButtonGroup bgp=new ButtonGroup();
    	String times=e.getString("Times",e.TYPE_MENU);
    	for(int i=2;i<5;i++){
    		JCheckBoxMenuItem jzm=new JCheckBoxMenuItem(i+times);
    		jzm.addActionListener(new ChangeZoomSizeActListener(i));
    		bgp.add(jzm);
    		zoommenu.add(jzm);
    		if(zoom==i){
    			jzm.setSelected(true);
    		}
    	}
    	JCheckBoxMenuItem jzm=new JCheckBoxMenuItem(e.getString("Hide",e.TYPE_MENU));
    	jzm.addActionListener(new ActionListener(){
    		public void actionPerformed(ActionEvent evt){
    			showZoomWindow(0);
    		}
    	});
    	bgp.add(jzm);
    	zoommenu.add(jzm);
    	if(zoom==0){
    		jzm.setSelected(true);
    	}
    	menu.add(zoommenu);
    	
    	return menu;
    }
    
    private JMenu createDeviceMenu(){
        JMenu menu=new JMenu(e.getString("Device",e.TYPE_MENU));
        int len=emuParam.getSupportedDeviceTypeCnt();
        ButtonGroup btnGroup=new ButtonGroup();
        int maxTypeDevice=20;
        int idx=0;
        int idx2=0;
        String include=e.getString("Include",e.TYPE_OTHER);
        for(int i=0;i<len;++i){
        	int len2=emuParam.getCertainDeviceCnt(i);
        	if(len2>0){
        		String fname=emuParam.getDeviceName(i*maxTypeDevice+1);
        		idx=fname.indexOf('_');
        		String deviceName=e.getString(fname.substring(0,idx),e.TYPE_MENU);
            	JMenu jmenu=new JMenu(deviceName);
            	for(int j=0;j<len2;++j){
            		String fullname=emuParam.getDeviceName(i*maxTypeDevice+j+1);
            		idx=fullname.indexOf('_');
            		idx2=fullname.indexOf(',',idx);
            		JRadioButtonMenuItem jmi=new JRadioButtonMenuItem(fullname.substring(idx+1,idx2));
                	jmi.addActionListener(new ChangeDeviceListener(i*maxTypeDevice+j+1));
                	jmi.setToolTipText(include+fullname.substring(idx2+1));
                	jmenu.add(jmi);
                	btnGroup.add(jmi);
                	if(i*maxTypeDevice+j+1==emuParam.getCurrentDevice()){
                		jmi.setSelected(true);
                	}
            	}
            	menu.add(jmenu);
        	} 
        }        
        return menu;
    }
    
    private JMenu createHelpMenu(){
    	JMenu help=new JMenu(e.getString("Help",e.TYPE_MENU));
    	JMenuItem about=new JMenuItem(e.getString("About",e.TYPE_MENU));
    	about.addActionListener(new ActionListener(){
    		public void actionPerformed(ActionEvent e){
    			showHelpDialog();
    		}
    	});
    	help.add(about);
    	return help;
    }
    
    public void changeDevice(int _deviceType){
    	int oldScrType=emuParam.getCurrentScreenType();
    	emuParam.changeDeviceType(_deviceType);
        if(devicePanel!=null){
            if(screenPanel!=null){
                devicePanel.remove(screenPanel);
            }
            this.getContentPane().remove(devicePanel);
        }else{
        	devicePanel=new DevicePanel();
        }
        if(oldScrType!=emuParam.getCurrentScreenType()||!finishInit){
        	devicePanel.setImage(emuParam.loadDeviceImage().getTrueImage());
        	devicePanel.setAlphabetImage(emuParam.loadAlphaImage().getTrueImage());
        	devicePanel.setAlphabetPos(emuParam.getAlphabetX(),emuParam.getAlphabetY());
        	devicePanel.resetAllButtons(emuParam.loadButtonImage(),emuParam.getButtonPositions());
        	if(screenPanel!=null){
        		screenPanel.resizeScreen();
        	}
        }
        screenOffsetX=emuParam.getScreenX();
        screenOffsetY=emuParam.getScreenY();
        screenWidth=emuParam.getScreenWidth();
        screenHeight=emuParam.getScreenHeight();
        deviceWidth=emuParam.getDeviceImageWidth();
        deviceHeight=emuParam.getDeviceImageHeight();
        if(screenPanel!=null){
            screenPanel.setBounds(screenOffsetX,screenOffsetY,screenWidth,screenHeight);
            devicePanel.add(screenPanel);            
        }
        this.getContentPane().add(devicePanel);
        devicePanel.setPreferredSize(new Dimension(deviceWidth,deviceHeight));
        adjustPosition();
        this.pack();
    }
    
    private void setEventHandle(){
        this.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent evt) {
                exitEmulator();
            }
        });

        this.addComponentListener(new ComponentAdapter(){
        	public void componentMoved(ComponentEvent evt){
        		moveWindow();
        	}
        });
        
        this.setDropTarget(new DropTarget(){
        	public static final long serialVersionUID=1;
        	public void drop(DropTargetDropEvent evt){
        		try{
        			Point p=evt.getLocation();
        			if((gameThread==null||!gameThread.started())&&p.x>screenOffsetX&&p.y>screenOffsetY
        					&&p.x<screenOffsetX+screenWidth
        					&&p.y<screenOffsetY+screenHeight){

            			evt.acceptDrop(evt.getDropAction());
            			java.util.List fileList=(java.util.List)evt.getTransferable().getTransferData(DataFlavor.javaFileListFlavor);
    	        		String filename=((File)fileList.get(0)).getAbsolutePath();
    	        		evt.dropComplete(true);
    	        		if(filename.endsWith(".jar")){
    	        			startNewGame(filename);
    	        		}else{
    	        			showMessage(e.getString("NonJar",e.TYPE_OTHER));
    	        		}
        			}else{
        				evt.rejectDrop();
        			}
	        		
        		}catch(Exception e2){
        			
        		}
        	}
        });
        
        this.addKeyListener(new KeyEventHandler());
    }
    
    private void adjustPosition(){
        Toolkit toolkit = Toolkit.getDefaultToolkit();
        Dimension screenSize = toolkit.getScreenSize();
        Insets screenIns=toolkit.getScreenInsets(this.getGraphicsConfiguration());
        Insets inset=this.getInsets();

⌨️ 快捷键说明

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