1. 程式人生 > >Applet小程式嵌入瀏覽器中顯示

Applet小程式嵌入瀏覽器中顯示

這篇文章寫了如何自己頂一個類,該類實現了簡單的計算器功能,然後通過瀏覽器訪問。

1、定義一個web專案,編寫一個類,該類主要實現計算器的佈局及功能的實現。

package com;

import java.awt.*;
import java.awt.event.*;

import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
 * JApplet 繼承了Applet
 * @author lww
 *
 */
public class cal extends JApplet implements ActionListener {

	Label lblTwoNum = new Label ("請輸入兩個數字");
    Label lblAdd = new Label ("此處顯示答案");

    TextField txtFirstNum = new TextField (2);
    TextField txtSecNum = new TextField (2);
    Button btnAdd = new Button ( "求和");
    
    TextField tf = new TextField();
    String s = "", s1;
	double d1, d2;
	
	private JFrame frame;
    public void init()
    {
    	//從頁面上獲取引數
    	int num1 = Integer.parseInt(getParameter("value1"));
    	int num2 = Integer.parseInt(getParameter("value2"));
    	
    	txtFirstNum.setText(""+num1);
    	txtSecNum.setText(""+num2);
    	frame = new JFrame();
    	frame.setTitle("點選按鈕改變顏色");
    	frame.getContentPane().add(new ButtonPanel());
    	frame.setSize(400, 300);
    	
    	Button PopButton = new Button("請點選");
    
    	PopButton.addActionListener(this);
    	
    	Panel o = new Panel(new BorderLayout());
        add(o);
        Panel addPanel = new Panel();
        addPanel.add (lblTwoNum);
        addPanel.add (txtFirstNum);
        addPanel.add (txtSecNum);
        addPanel.add (btnAdd);
        addPanel.add (lblAdd);
        o.add(addPanel,"North");
        o.add(PopButton,BorderLayout.WEST);
        
        Panel cal = new Panel(new BorderLayout());
       
        cal.add(tf, "North");
		
        o.add(cal,"Center");
        
        Panel pn3 = new Panel(new BorderLayout());
        cal.add(pn3, "Center");

		Panel pn2 = new Panel();// 功能鍵介面(清除鍵和關閉鍵)
		pn2.setLayout(new BorderLayout());

		Panel pn1 = new Panel();// 運算介面

		pn1.setLayout(new GridLayout(4, 4));

		pn3.add(pn2, "North");
		pn3.add(pn1);
		// 設定按鈕
		JButton b = new JButton("CLEAR");
		b.setToolTipText("請按清除鍵!");// 設定清零鍵
		b.setForeground(Color.RED);// 設定字型顏色
		b.setBackground(Color.YELLOW);// 設定背景色
		b.addActionListener(this);
		pn2.add(b, "Center");
		b = new JButton("OFF");
		b.setToolTipText("請按退出鍵!");// 設定off鍵,點選退出應用程式b.addActionListener(this);
		b.setForeground(Color.RED);// 字型顏色
		b.setBackground(Color.ORANGE);// 背景色
		pn2.add(b, "East");
		b = new JButton("1");// add butten 1
		b.addActionListener(this);
		pn1.add(b);
		b = new JButton("2");// add butten 2
		b.addActionListener(this);
		pn1.add(b);
		b = new JButton("3");// add butten 3
		b.addActionListener(this);
		pn1.add(b);
		b = new JButton("+");// add butten +
		b.setForeground(Color.BLUE);// 設定字型顏色
		b.addActionListener(this);
		pn1.add(b);
		b = new JButton("4");// add butten 4
		b.addActionListener(this);
		pn1.add(b);
		b = new JButton("5");// add butten 5
		b.addActionListener(this);
		pn1.add(b);
		b = new JButton("6");// add button 6
		b.addActionListener(this);
		pn1.add(b);
		b = new JButton("-");// add button -
		b.setForeground(Color.BLUE);// 設定字型顏色
		b.addActionListener(this);
		pn1.add(b);
		b = new JButton("7");// add button 7
		b.addActionListener(this);
		pn1.add(b);
		b = new JButton("8");// add button 8
		b.addActionListener(this);
		pn1.add(b);
		b = new JButton("9");// add button 9
		b.addActionListener(this);
		pn1.add(b);
		b = new JButton("*");// add button *
		b.setForeground(Color.BLUE);// 設定字型顏色
		b.addActionListener(this);
		pn1.add(b);
		b = new JButton("0");// add button 0
		b.addActionListener(this);
		pn1.add(b);
		b = new JButton(".");// add button .
		b.addActionListener(this);
		pn1.add(b);
		b = new JButton("=");// add button =
		b.setForeground(Color.RED);// 設定字型顏色
		b.addActionListener(this);
		pn1.add(b);
		b = new JButton("\\");// add button \
		b.setForeground(Color.BLUE);// 設定字型顏色
		b.addActionListener(this);
		pn1.add(b);
        
        this.resize(400,300); 
        btnAdd.addActionListener (this);
    }

    public void actionPerformed (ActionEvent e)
    {
    	if(e.getActionCommand().equals("請點選")) {
    		if (frame.isVisible()) 
    			frame.setVisible(false);
            else frame.show();
    	} else if(e.getActionCommand().equals("求和")){
    		try{
        		if(txtFirstNum.getText().length()!=0 &&txtSecNum.getText().length()!=0){
        			String firstNum = txtFirstNum.getText();
        	        String secNum = txtSecNum.getText();
        	        int add = Integer.parseInt(firstNum) + Integer.parseInt(secNum);
        	        lblAdd.setText ("兩數之和:"+ add);
        		}
        		   
        	} catch (Exception ex) {
    			// TODO: handle exception
    		}
    	}else {
    		String command = e.getActionCommand();
    		tf.setText(tf.getText() + command);
    		if (command.equals("CLEAR")) // 清零鍵 按下時返回初始狀態
    		{
    			s1 = null;
    			s = "";
    			tf.setText("");// 記錄輸入值的變數清空
    		}

    		else if (command.equals("OFF"))
    			System.exit(0);// off鍵 關閉應用程式

    		else if (!command.equals("*") && !command.equals("\\")
    				&& !command.equals("+") && !command.equals("-")
    				&& !command.equals("="))// 判斷輸入是否為數字
    		{
    			if (s1 == null)// 判斷輸入是否為第一個
    				s1 = command;
    			else
    				s1 += command;
    			d1 = new Double(s1).doubleValue();// 字串型轉換為雙精度型,還原輸入數字
    			try {
    				if (s.equals("+"))
    					d1 = d1 + d2;// 加法運算
    				else if (s.equals("-"))
    					d1 = d2 - d1;// 減法運算
    				else if (s.equals("*"))
    					d1 = d1 * d2;// 乘法運算
    				else if (s.equals("\\"))
    					d1 = d2 / d1;// 除法運算
    			} catch (Exception ex) {
    				tf.setText("Error");// 錯誤顯示"Error"
    				System.out.println(ex.getMessage());
    			}
    		} else if (!command.equals("=")) // 判斷輸入是否為+ -
    		{
    			s = command;
    			s1 = null;
    			d2 = d1;
    		}

    		else// 輸入=時,顯示運算結果
    		{

    			tf.setText(tf.getText() + d1);

    		}
    	}
    }
    public void paint(Graphics g) {

	}
}
class ButtonPanel extends JPanel
{
    private class ColorAction implements ActionListener
    {
        private Color backgroundColor;
        public void actionPerformed(ActionEvent actionevent)
        {
            setBackground(backgroundColor);
            repaint();
        }

        public ColorAction(Color color)
        {
            backgroundColor = color;
        }
    }

    public ButtonPanel()
    {
        JButton jbutton = new JButton("橙色");
        JButton jbutton1 = new JButton("藍色");
        JButton jbutton2 = new JButton("紅色");
        add(jbutton);
        add(jbutton1);
        add(jbutton2);
        ColorAction coloraction = new ColorAction(Color.orange);
        ColorAction coloraction1 = new ColorAction(Color.blue);
        ColorAction coloraction2 = new ColorAction(Color.red);
        jbutton.addActionListener(coloraction);
        jbutton1.addActionListener(coloraction1);
        jbutton2.addActionListener(coloraction2);
    }
}
然後打包該類。

執行---cmd 進入到該專案所在的WebRoot\WEB-INF\classes下

命令:jar -cvf Cal.jar *.* (打包該目錄下的內容,jar包檔名稱為Cal.jar)

建立一個keyStore 檔案

keytool -genkey -alias examples(金鑰名,任意取名) -keypass 12345678(金鑰密碼,任意取名) -storepass (金鑰密碼對,與上一密碼密碼一致) -keystore .mykeystore(生成金鑰檔名,任意取名)


在class目錄下會有Cal.jar 和 .mykeystore檔案

然後用該檔案對Cal.jar 進行簽名

 金鑰庫的口令短語是:123456

examples的金鑰口令是:12345678


簽名後可以檢視Cal.jar 包META-INF中是否生成EXAMPLES.SF   EXAMPLES.DSA兩個檔案

然後將該jar包拷貝放到專案的WebRoot中

然後定義index.jsp

<%@ page language="java" import="java.util.*" contentType="text/html; charset=GBK"
    pageEncoding="GBK"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>demo</title>
</head>
<body>
	 <APPLET CODE="com.cal.class" <!--呼叫的類-->
	  id="cal" 
	  codebase="." 
	  ARCHIVE = "Cal.jar"<!--使用的jar包名稱-->

	  WIDTH="800" 
	  HEIGHT="800">
	  <PARAM NAME="value1" VALUE="12"><!--頁面傳遞的引數-->
	  <PARAM NAME="value2" VALUE="23">
      </APPLET>
     
</body>
</html>
專案目錄結構

因為applet的執行是沙箱機制,在呼叫本地程式時需要做安全性設定。在本地執行該applet的jre\lib\security\java.policy檔案裡最後加permission java.security.AllPermission;這裡需要注意的是如果客戶端裝有多個jre的話,需要找一下哪個jre是真正執行applet的

若不想修改這樣,可以再呼叫的java類中對程式碼提升許可權,例如:

private String runCmd(){  
    String result = AccessController.doPrivileged(new PrivilegedAction<String>() {   //提升許可權 
        @Override    
        public String run() {  
                String res = null;  
// 程式碼的具體實現
        //TODO like 'Runtime.getRuntime().exec(cmd)' etc.....  
                return res;    
            }  
        });  
    return result;  
}  


部署流程,然後通過瀏覽器訪問 localhost:8080/ee