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 + -
显示快捷键?