javaapp.java
来自「有关java的源程序,为讲授java程序设计课程使用」· Java 代码 · 共 540 行
JAVA
540 行
// JavaApp.java:
import java.io.*;
import java.awt.*;
import java.awt.event.*;
//==============================================================================
class JavaApp extends Frame implements Runnable,MouseListener,WindowListener,ActionListener,ItemListener
{
private Thread m_MultiThread = null;
private Graphics m_Graphics;
private Image m_Images[];
private int m_nCurrImage;
private int m_nImgWidth = 0;
private int m_nImgHeight = 0;
private boolean m_fAllLoaded = false;
private final int NUM_IMAGES = 18;
private boolean m_fStandAlone = false;
private boolean threadRunning=false;
Button playButton,stopButton,clearImageButton;;
Dimension rectSize;
Menu fileMenu,subMenu,editMenu,viewMenu,helpMenu;
MenuItem newItem,openItem,saveItem,saveAsItem,printItem,pageSetItem,exitItem;
MenuItem subOneItem,subTwoItem;
MenuItem unDoItem,cutItem,copyItem,pasteItem,findItem,replaceItem;
CheckboxMenuItem viewOneItem,viewTwoItem;
MenuItem contentItem,aboutItem;
String useSelectFile=null;
public static void main(String args[])
{
JavaApp frame = new JavaApp("JavaApp");
frame.show();
frame.hide();
frame.show();
}
public JavaApp(String str)
{
super (str); //先调用基类的构造函数
rectSize=new Dimension(400,400);
setSize(rectSize); //设置窗口的大小
Panel upPanel=new Panel();
playButton=new Button("Play");
playButton.addMouseListener(this);
stopButton=new Button("Stop");
stopButton.addMouseListener(this);
clearImageButton=new Button("Clear");
clearImageButton.addMouseListener(this);
upPanel.add(playButton);
upPanel.add(stopButton);
upPanel.add(clearImageButton);
add(upPanel,"North"); //Frame的缺省布局方式为BorderLayout(方位布局)
addMouseListener(this); //为主窗口添加事件
addWindowListener(this);
MenuBar menuBar=new MenuBar();
setMenuBar(menuBar);
fileMenu=new Menu("File");
newItem=new MenuItem("New");
newItem.addActionListener(this);
fileMenu.add(newItem);
openItem=new MenuItem("Open");
openItem.addActionListener(this);
fileMenu.add(openItem);
saveItem=new MenuItem("Save");
saveItem.addActionListener(this);
fileMenu.add(saveItem);
saveAsItem=new MenuItem("Save As");
saveAsItem.addActionListener(this);
fileMenu.add(saveAsItem);
fileMenu.addSeparator();
printItem=new MenuItem("Print");
printItem.addActionListener(this);
fileMenu.add(printItem);
pageSetItem=new MenuItem("Page Setup");
pageSetItem.addActionListener(this);
fileMenu.add(pageSetItem);
subMenu=new Menu("Sub Menu");
subOneItem=new MenuItem("Sub One");
subOneItem.addActionListener(this);
subMenu.add(subOneItem);
subTwoItem=new MenuItem("Sub Two");
subTwoItem.addActionListener(this);
subMenu.add(subTwoItem);
fileMenu.add(subMenu);
fileMenu.addSeparator();
exitItem=new MenuItem("Exit");
exitItem.addActionListener(this);
fileMenu.add(exitItem);
editMenu=new Menu("Edit");
unDoItem=new MenuItem("UnDo");
unDoItem.addActionListener(this);
editMenu.add(unDoItem);
cutItem=new MenuItem("Cut");
cutItem.addActionListener(this);
editMenu.add(cutItem);
copyItem=new MenuItem("Copy");
copyItem.addActionListener(this);
editMenu.add(copyItem);
pasteItem=new MenuItem("Paste");
pasteItem.addActionListener(this);
editMenu.add(pasteItem);
editMenu.addSeparator();
findItem=new MenuItem("Find");
findItem.addActionListener(this);
editMenu.add(findItem);
replaceItem=new MenuItem("Replace");
replaceItem.addActionListener(this);
editMenu.add(replaceItem);
viewMenu=new Menu("View");
viewOneItem=new CheckboxMenuItem("View One");
viewOneItem.addItemListener(this);
viewMenu.add(viewOneItem);
viewTwoItem=new CheckboxMenuItem("View Two");
viewTwoItem.addItemListener(this);
viewMenu.add(viewTwoItem);
helpMenu=new Menu("Help");
contentItem=new MenuItem("Content");
contentItem.addActionListener(this);
helpMenu.add(contentItem);
aboutItem=new MenuItem("About");
aboutItem.addActionListener(this);
helpMenu.add(aboutItem);
menuBar.add(fileMenu);
menuBar.add(editMenu);
menuBar.add(viewMenu);
menuBar.add(helpMenu);
}
public void startThread()
{
if (m_MultiThread == null)
{
m_MultiThread = new Thread(this);
m_MultiThread.start();
threadRunning=true;
}
}
public void stopThread()
{
if (m_MultiThread != null)
{
m_MultiThread.stop();
m_MultiThread = null;
threadRunning=false;
}
}
public void run()
{
m_nCurrImage = 0;
if (!m_fAllLoaded)
{
repaint();
m_Graphics = getGraphics();
m_Images = new Image[NUM_IMAGES];
MediaTracker tracker = new MediaTracker(this);
String strImage;
for (int i = 1; i <= NUM_IMAGES; i++)
{
// Build path to next image
//--------------------------------------------------------------
strImage = "images/img00" + ((i < 10) ? "0" : "") + i + ".gif";
m_Images[i-1] = Toolkit.getDefaultToolkit().getImage(strImage);
tracker.addImage(m_Images[i-1], 0);
}
try
{
tracker.waitForAll();
m_fAllLoaded = !tracker.isErrorAny();
}
catch (InterruptedException e)
{
}
if (!m_fAllLoaded)
{
stopThread();
m_Graphics.drawString("Error loading images!", 10, 40);
return;
}
m_nImgWidth = m_Images[0].getWidth(this);
m_nImgHeight = m_Images[0].getHeight(this);
}
repaint();
while (true)
{
try
{
// Draw next image in animation
//--------------------------------------------------------------
displayImage(m_Graphics);
m_nCurrImage++;
if (m_nCurrImage == NUM_IMAGES)
m_nCurrImage = 0;
// TODO: Add additional thread-specific code here
Thread.sleep(50);
}
catch (InterruptedException e)
{
stopThread();
}
}
}
private void displayImage(Graphics g)
{
if (!m_fAllLoaded)
return;
rectSize=getSize();
g.drawImage(m_Images[m_nCurrImage],(rectSize.width - m_nImgWidth)/ 2,
(rectSize.height - m_nImgHeight)/ 2, null);
}
public void paint(Graphics g)
{
if (m_fAllLoaded)
{
g.clearRect(0,0, rectSize.width, rectSize.height);
displayImage(g);
}
else
g.drawString("Loading images...", 10, 20);
}
public void mousePressed(MouseEvent evt)
{
}
public void mouseReleased(MouseEvent evt)
{
}
public void mouseEntered(MouseEvent evt)
{
}
public void mouseExited(MouseEvent evt)
{
}
public void mouseClicked(MouseEvent evt)
{
if(evt.getSource()==this) //Clicked at My Applet ?
{
}
else if(evt.getSource()==playButton) //Clicked at Play Button ?
{
startThread();
}
else if(evt.getSource()==stopButton) //Clicked at Stop Button ?
{
stopThread();
}
else if(evt.getSource()==clearImageButton) //Clicked at Clear Button ?
{
stopThread();
Graphics currentG=getGraphics();
currentG.setClip((rectSize.width - m_nImgWidth)/2,
(rectSize.height - m_nImgHeight)/2,
m_nImgWidth,
m_nImgHeight);
currentG.clearRect((rectSize.width - m_nImgWidth)/2,
(rectSize.height - m_nImgHeight)/2,
m_nImgWidth,
m_nImgHeight);
}
}
public void windowClosing(WindowEvent evt)
{
dispose();
System.exit(0);
}
public void windowOpened(WindowEvent evt)
{
}
public void windowIconified(WindowEvent evt)
{
if(threadRunning)
stopThread();
}
public void windowDeiconified(WindowEvent evt)
{ if(threadRunning)
startThread();
}
public void windowClosed(WindowEvent evt)
{
}
public void windowActivated(WindowEvent evt)
{
}
public void windowDeactivated(WindowEvent evt)
{
}
public void actionPerformed(ActionEvent evt)
{
if(evt.getSource()==newItem)
{
}
else if(evt.getSource()==openItem)
{
FileDialog openDialog=new FileDialog(this,"File Open Dialog");
openDialog.setVisible(true);
if(openDialog.getFile()==null)
return;
useSelectFile=openDialog.getDirectory() +openDialog.getFile();
/* Use Byte Stream FileInputStream
try{
File fileName=new File(useSelectFile);
FileInputStream fis=new FileInputStream(fileName);
byte b[] = new byte[(int)fileName.length()];
int len;
while ((len = fis.read(b)) != -1)
{
String text = new String (b, 0, 0 , len);
setTitle(text);
}
fis.close();
}
catch (IOException e)
{
setTitle(e.toString());
}
*/
try{ // Use Character Stream InputStreamReader
File fileName=new File(useSelectFile);
FileInputStream fis=new FileInputStream(fileName);
InputStreamReader isr=new InputStreamReader(fis);
char b[]=new char[(int)fileName.length()];
int len;
while(isr.read(b)!= -1)
{
String text = new String (b);
setTitle(text);
}
isr.close();
fis.close();
}
catch (IOException e)
{
setTitle(e.toString());
}
}
else if(evt.getSource()==saveItem)
{
if(useSelectFile!=null)
{
/*
try
{ String text =getTitle();
int len = text.length();
byte b[] = new byte[len];
text.getBytes(0, len-1, b, 0);
FileOutputStream fos=new FileOutputStream(useSelectFile);
fos.write(b);
fos.close();
}
catch (IOException e)
{
}
*/
try
{
String text =getTitle();
FileOutputStream fos=new FileOutputStream(useSelectFile);
OutputStreamWriter osw=new OutputStreamWriter(fos);
osw.write(text);
osw.close();
fos.close();
}
catch (IOException e)
{
}
}
}
else if(evt.getSource()==saveAsItem)
{
FileDialog saveAsDialog=new FileDialog(this,"File Save As Dialog",1);
saveAsDialog.setVisible(true);
if(saveAsDialog.getFile()==null)
return;
useSelectFile=saveAsDialog.getDirectory() +saveAsDialog.getFile();
try
{ String text =getTitle();
int len = text.length();
byte b[] = new byte[len];
text.getBytes(0, len-1, b, 0);
FileOutputStream fos=new FileOutputStream(useSelectFile);
fos.write(b);
fos.close();
}
catch (IOException e)
{
}
}
else if(evt.getSource()==aboutItem)
{
String info = "About OutPut Text";
AboutDialog aboutDialog = new AboutDialog(this, info);
aboutDialog.pack();
aboutDialog.setSize(400,400);
aboutDialog.setVisible(true);
}
}
public void itemStateChanged(ItemEvent evt)
{
if(evt.getSource()==viewOneItem)
{
boolean viewOneMenu;
if(evt.getStateChange()==evt.SELECTED)
{
viewOneMenu=true;
}
else if(evt.getStateChange()==evt.DESELECTED)
{
viewOneMenu=false;
}
}
else if(evt.getSource()==viewTwoItem)
{
boolean viewTwoMenu;
if(evt.getStateChange()==evt.SELECTED)
{
viewTwoMenu=true;
}
else if(evt.getStateChange()==evt.DESELECTED)
{
viewTwoMenu=false;
}
}
}
}
class AboutDialog extends Dialog implements ActionListener,WindowListener
{
Frame parent;
String aboutInfo;
AboutDialog (Frame parent, String aboutInfo)
{
super(parent, "About Dialog", true);
this.parent = parent;
this.aboutInfo = aboutInfo;
setLayout(new BorderLayout());
Panel OKPanel=new Panel();
Button OKButton=new Button("OK");
OKButton.addActionListener(this);
OKPanel.add(OKButton);
add("South", OKPanel);
addWindowListener(this);
}
public void paint(Graphics g)
{
g.drawString(aboutInfo,50,50);
}
public void actionPerformed(ActionEvent evt)
{
if(evt.getActionCommand().equals("OK"))
{
dispose();
}
}
public void windowClosing(WindowEvent evt)
{
dispose();
}
public void windowOpened(WindowEvent evt)
{
}
public void windowIconified(WindowEvent evt)
{
}
public void windowDeiconified(WindowEvent evt)
{
}
public void windowClosed(WindowEvent evt)
{
}
public void windowActivated(WindowEvent evt)
{
}
public void windowDeactivated(WindowEvent evt)
{
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?