📄 emulatorframe.java
字号:
/*
* 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 + -