Java,JSP,Servlet,サーブレット - サンプル。
==================== 設定 ==================== ■Java ・参考サイト http://java.sun.com/ http://jakarta.apache.org/tomcat/ http://java.sun.com/j2se/1.4/ja/docs/ja/api/ ・開発環境(コンパイラなど)、実行環境 J2SE v 1.4.2_07 SDK(Java 2 SDK, Standard Edition 1.4.2_07) ・実行環境のみ J2SE v 1.4.2_07 JRE(Java 2 Runtime Environment) ■サーブレットのコンパイル ・サーブレットのコンパイルには、servlet.jarが必要。 ・tomcatのlib\commonディレクトリなどにある。 ・コマンドライン コマンドラインから javac -classpath C:\www\tomcat\lib\common\servlet.jar Sample.java ・package packageを使用して、他のclassファイルと関連付けしている場合、 classpathでpackageのトップのディレクトリも指定する。 C:\sitebuild\WEB-INF\srcがpackageのトップのディレクトリの場合 javac -classpath C:\sitebuild\WEB-INF\src;C:\www\tomcat\lib\common\servlet.jar Sample.java ■Javaコマンド ・コンパイル javac sample.java ・実行 java sample ・圧縮 jar cvf hello.jar *.class ・解凍 jar xvf hello.jar ・Javaのバージョン java -version ==================== Java、サーブレット、JSP ==================== ■JSPサンプル <%@ page language="java" errorPage="/err_page.jsp" isErrorPage="true" contentType="text/html; charset=Shift_JIS" %> <HTML> <BODY> <% String jpString = "あかさたな"; String enString = "ABCDEFG"; %> jpString : <%=jpString%> <BR> enString : <%=enString%> </BODY> </HTML> ■サーブレットサンプル import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class TestServlet extends HttpServlet { public void init() throws ServletException { } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html; charset=Shift_JIS"); PrintWriter out = response.getWriter(); out.println("<HTML><BODY>"); out.println("サーブレットテスト"); out.println("</BODY></HTML>"); out.close(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } ■型 boolean 論理型(true/false)8ビット int 整数(-2147483648~2147483647)32ビット byte 8ビット整数(-128~127)8ビット char 文字型(Unicode)16ビット short 単長整数(-32768~32767)16ビット long 倍長整数(-9223372036854775808~9223372036854775807)64ビット float 浮動小数点数(有効桁数 7)32ビット double 倍精度浮動小数点数(有効桁数 16)64ビット String 文字列 ■型変換、キャスト //String to int int i = Integer.parseInt(str); //int to String String str = Integer.toString(i); //文字列と連結すればStringになる String str = "i:" + i; ■演算子 + 加算 - 減算 * 乗算 / 除算 % 剰余 & 論理積 ++ インクリメント -- ディクリメント < 小なり > 大なり <= 小なりイコール >= 大なりイコール == イコール != ノットイコール && 且つ(and) || または(or) ! 否定(not) ■制御文 ・if if(i < 10){ }else if(i >= 10){ }else{ } if(str.equals("test")){ } ・for for(i=0;i<10;i++){ } ・while while(i < 10){ i++; } ・do while do{ j++; }while(j < 10); ・switch switch(i){ case 0 : str = "A"; break; case 1 : str = "B"; break; case 2 : str = "C"; break; case 3 : str = "D"; break; default : str = "E"; } ・break 強制的にループを途中で終了 ・continue 強制的にループの最初に戻る ■出力 ・ページ出力 //printlnは、"\n"付き出力。 //JSPは、PrintWriterはいらない。 PrintWriter out = response.getWriter(); out.print("test"); out.println("test"); ・コンソール出力 System.out.println("test"); ・tomcatログ出力 log("test"); ■文字列 ・連結1 String str = "test" + 1 + "\n"; ・連結2 / たくさん連結する場合は、StringBufferの方が速い StringBuffer sb = new StringBuffer(); for(int i=0;i<10;i++){ sb.append("A").append(i).append("B"); sb.append("C").append(i).append("D"); } String test = sb.toString(); ・文字列一致 / 一致した位置の数値を返す(一致すれば0以上) String str = "test"; if(str.indexOf("Windows") >= 0){ } ・分割 / substring(分割開始位置, 終了位置) String str = "abcdefghijklmn"; str.substring(2, 12); ・長さ、バイト数 String str = "test"; int strLength = str.length(); ・置換 / char型だけ置換、クオートで囲む。文字列の置換はできない。 String str = "test's"; str = str.replace('\'', '`'); //改行を空白に:replace('\n', ' '); //~の置換:replace('\u301c', '\uff5e') ■正規表現 ・書き方は、PerlやPHPなどと同じ ・import import java.util.regex.*; ・一致 / パターンマッチ Pattern pattern = Pattern.compile("^.*test.*"); Matcher matcher = pattern.matcher("123test456"); boolean bool = matcher.matches(); ・分割 / スプリット Pattern pattern = Pattern.compile("[, ]+"); String[] str = pattern.split("test 123,456"); for (int i=0;i<str.length;i++) { System.out.println(str[i]); } ・置換 Pattern pattern = Pattern.compile("test"); Matcher matcher = pattern.matcher("1234test1234test"); //文字列の最初だけ String str1 = matcher.replaceFirst("JavaJava"); //文字列すべて String str2 = matcher.replaceAll("JavaJava"); System.out.println(str1); System.out.println(str2); ■引数取得 String str = request.getParameter("sample"); ■リダイレクト ・Dispatcher / 同じサーバ内だけ / JSPに値を渡す ・サーブレット request.setAttribute("test", str); servletContext.getRequestDispatcher("/test/test.jsp).forward(request, response); ・JSP String test = (String)request.getAttribute("test"); ・sendRedirect response.sendRedirect("http://"+urlStr); ・Location response.setHeader("Location", url); response.setStatus(302); ・JSPフォワード pageContext.forward("/test/test.jsp"); ■ファイルのインクルード(JSP) ・includeディレクティブ <%@ include file="/test.jsp" %> 例えば、sample.jspがtest.jspをincludeする場合 test.jspは、sample.jspの初回アクセス時にコンパイルされる。 test.jspを更新するまではコンパイルされたものが処理される。 test.jspを更新しても、sample.jspを更新しないと更新内容が反映されない。 sample.jspで全てのincludeディレクティブを読み込んでから、ページ全体のJSPが実行される。 ・includeアクション <jsp:include page="/test.jsp" /> 例えば、sample.jspがtest.jspをincludeする場合 test.jspは、sample.jspへのアクセスごとに毎回新規にコンパイルされ、読み込まれる。 test.jspを更新したら、sample.jspを更新しなくても更新内容が反映される。 test.jspが読み込まれた時点で処理が実行される。 ■ファイルを読み込んで出力 //FileInputStream String strBuff = ""; String serverDir = "/htdocs/"+fileName; File fname = new File(serverDir); int fsize = (int)(fname.length()); InputStream in = new FileInputStream(serverDir); byte[] buf = new byte[fsize]; int rsize; while ((rsize = in.read(buf)) >= 0) { strBuff += new String(buf, "8859_1"); } in.close(); response.setContentLength(fsize); out.print(strBuff); ■フォーマット import java.text.*; import java.util.*; Date date = new Date(); SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E"); String str1 = sdFormat.format(date); DecimalFormat dFormat = new DecimalFormat("###,###,###"); String str2 = dFormat.format(123456789); ■日付 //JavaSample import java.io.*; import java.util.*; import java.text.*; public class JavaSample extends Object{ public static void main(String[] argv){ //日付のフォーマット指定 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E"); //Calendar Calendar calendar = Calendar.getInstance(); Date gTime = calendar.getTime(); int gYear = calendar.get(Calendar.YEAR); int gMonth = calendar.get(Calendar.MONTH) + 1; int gDate = calendar.get(Calendar.DATE); int gHour = calendar.get(Calendar.HOUR); int gHourOfDay = calendar.get(Calendar.HOUR_OF_DAY); int gMinute = calendar.get(Calendar.MINUTE); int gSecond = calendar.get(Calendar.SECOND); int gDayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); int gDayOfYear = calendar.get(Calendar.DAY_OF_YEAR); //日付をフォーマット String fDate1 = formatter.format(calendar.getTime()); //日付を一月先にセット calendar.add(Calendar.MONTH, 1); //一月先の日付 String fDate2 = formatter.format(calendar.getTime()); //任意の日付に変更 calendar.set(2000, 0, 15, 0, 0, 0); String fDate3 = formatter.format(calendar.getTime()); System.out.println(gTime); System.out.println(gYear + "年" + gMonth + "月" + gDate + "日"); System.out.println(gHour + "時" + gMinute + "分" + gSecond + "秒"); System.out.println(gHourOfDay + "時" + gMinute + "分" + gSecond + "秒"); System.out.println(gDayOfWeek + "番目の曜日 / " + gDayOfYear + "番目の日付"); System.out.println(fDate1); System.out.println(fDate2); System.out.println(fDate3); } } ■sin、cos、tan //JavaSample import java.io.*; import java.lang.Math; public class JavaSample extends Object{ public static void main(String[] argv){ double d = 30.0; double pai = 3.1415; System.out.println("sin : " + Math.sin(d * pai / 180)); System.out.println("cos : " + Math.cos(d * pai / 180)); System.out.println("tan : " + Math.tan(d * pai / 180)); } } ■システムコマンド実行 / コマンド実行して出力を受け取る Process process = null; String line = ""; String strBuff = ""; int pwF = 0; int peV = 0; try{ process = Runtime.getRuntime().exec("/htdocs/test.sh test"); //process = Runtime.getRuntime().exec("ls"); pwF = process.waitFor(); peV = process.exitValue(); InputStream is = process.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); while((line = br.readLine()) != null){ strBuff += line; } }catch(IOException e){ System.out.println(e.getMessage()); }catch(Exception e){ } System.out.println(strBuff); ■手動置換 //\(5C)(\u005c)マークのエスケープ public String sqlEscape5C(String str){ //String[] before5C = {"\u005c\"};//" //String[] after5C = {"\u005c\\u005c\"};//" String[] before5C = {"\\"};//" String[] after5C = {"\\\\"};//" StringBuffer sb = new StringBuffer(str); for(int i=0;i<before5C.length;i++){ int j = sb.toString().indexOf(before5C[i]); while (j != -1) { // 変換が必要な文字の置換 sb.delete(j, j + before5C[i].length()); sb.insert(j, after5C[i]); // 次に変換が必要な文字の検索 j = j + after5C[i].length(); j = sb.toString().indexOf(before5C[i], j); } } return sb.toString(); } ■文字変換 //SJIS -> Unicode 変換(JISAutoDetect) public String sjis2UnicodeAuto(String str) throws java.io.UnsupportedEncodingException { if(str != null && !str.equals("")){ str = new String(str.getBytes("8859_1"),"JISAutoDetect"); } return str; } //SJIS -> Unicode 変換 public String sjis2Unicode(String str) throws java.io.UnsupportedEncodingException { if(str != null && !str.equals("")){ str = new String(str.getBytes("8859_1"), "SJIS"); } return str; } //Unicode -> SJIS 変換 public String unicode2Sjis(String str) throws java.io.UnsupportedEncodingException { if(str != null && !str.equals("")){ str = new String(str.getBytes("SJIS"), "8859_1"); } return str; } ■URLエンコード、URLデコード //URLエンコード public static String urlEncode(String str) { if(str != null && !str.equals("")){ try{ str = java.net.URLEncoder.encode(str, "SJIS"); }catch(UnsupportedEncodingException e){ }catch(Exception e){ } } return str; } //URLデコード public static String urlDecode(String str) { if(str != null && !str.equals("")){ try{ str = java.net.URLDecoder.decode(str, "SJIS"); }catch(UnsupportedEncodingException e){ }catch(Exception e){ } } return str; } ■MD5変換 import java.security.*; //MD5変換 public String getMD5String(String str) { if(str != null && !str.equals("")){ try{ MessageDigest md5 = MessageDigest.getInstance("MD5"); char[] HEX = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; byte[] md5Byte = md5.digest(str.getBytes("ASCII")); StringBuffer sb = new StringBuffer(); for(int i=0;i<md5Byte.length;i++){ sb.append(HEX[(int)(md5Byte[i] & 0xff) / 16]); sb.append(HEX[(int)(md5Byte[i] & 0xff) % 16]); } str = sb.toString(); }catch(NoSuchAlgorithmException e){ }catch(Exception e){ } } return str; } ==================== アプレット ==================== ■アプレット ・ブラウザは、初期状態では最新のコンパイラでコンパイルしたアプレットは動作しない。 HTMLのAPPLETタグで表示しようとしてもload: class HelloWorld not foundなどのエラーになる。 Java1.1などの古いコンパイラでコンパイルしたアプレットは動く。 基本的にJ2SE SDKやJRE(Java Plug-in)などの実行環境をインストールしないと動かない。 J2EEは、インストールしてもブラウザのPlug-inがインストールされない。 ■HTML ・APPLETタグ <APPLET CODE="JavaAppletSample.class" WIDTH="500" HEIGHT="500"> <PARAM NAME="text" VALUE="param test"> </APPLET> ■文字表示など ・JavaAppletSample.java //JavaAppletSample import java.applet.*; import java.awt.*; public class JavaAppletSample extends Applet{ public void paint(Graphics g){ //背景色:R,G,B setBackground(new Color(200, 200, 100)); //色設定:R,G,B g.setColor(new Color(100, 50, 255)); //フォント指定:フォント,スタイル(PLAIN,BOLD,ITALIC),サイズ g.setFont(new Font("MS 明朝", Font.ITALIC, 20)); //String型文字列 String str1 = "Fontテスト"; //文字表示:文字列,x座標,y座標 g.drawString(str1, 20, 30); //char型文字列 char str2[] = {'a', 'b', 'c', 'd', 'e', 'f'}; //文字表示:char型配列,配列中の描画始点,描画文字数,x座標,y座標 g.drawChars(str2, 1, 4, 20, 60); //ステータスバーにメッセージ表示 showStatus(str1); //画像読み込み:アプレットがあるURL,画像のパス Image img = getImage(getDocumentBase(), "image.gif"); //画像読み込み:画像,x座標,y座標,表示幅(ピクセル,省略可),表示高さ(ピクセル,省略可) g.drawImage(img, 20, 90, 100, 50, this); //パラメータ取得 <PARAM NAME="text" VALUE="param test"> String pStr = getParameter("text"); g.drawString(pStr, 200, 30); } } ■図形表示 ・HTMLタグ <APPLET CODE="JavaAppletSample.class" WIDTH="500" HEIGHT="500"> <PARAM NAME="text" VALUE="param test"> </APPLET> ・JavaAppletSample.java //JavaAppletSample import java.applet.*; import java.awt.*; public class JavaAppletSample extends Applet{ public void paint(Graphics g){ //色設定:R,G,B g.setColor(new Color(100, 100, 200)); //移動量 int a = 130; //基本座標 int lineX = 20; int lineY = 20; //線:始点x座標,始点y座標,終点x座標,終点y座標 g.drawLine(lineX, lineY, 120, 40); //基本座標 int rectX = 20; int rectY = 50; //四角・線:左上x座標,左上y座標,幅,高さ g.drawRect(rectX, rectY, 100, 20); //四角・塗:左上x座標,左上y座標,幅,高さ g.fillRect(rectX + a, rectY, 100, 20); //基本座標 int dRectX = 20; int dRectY = 80; //3D四角・線:左上x座標,左上y座標,幅,高さ,true(浮出し)/false(非浮出し) g.draw3DRect(dRectX, dRectY, 100, 20, false); //3D四角・塗:左上x座標,左上y座標,幅,高さ,true(浮出し)/false(非浮出し) g.fill3DRect(dRectX + a, dRectY, 100, 20, true); //基本座標 int roundRectX = 20; int roundRectY = 110; //丸角四角・線:左上x座標,左上y座標,幅,高さ,角円弧幅,角円弧高さ g.drawRoundRect(roundRectX, roundRectY, 100, 20, 20, 30); //丸角四角・塗:左上x座標,左上y座標,幅,高さ,角円弧幅,角円弧高さ g.fillRoundRect(roundRectX + a, roundRectY, 100, 20, 20, 30); //基本座標 int ovalX = 20; int ovalY = 140; //円・線:左上x座標,左上y座標,幅,高さ g.drawOval(ovalX, ovalY, 100, 20); //円・塗:左上x座標,左上y座標,幅,高さ g.fillOval(ovalX + a, ovalY, 100, 20); //座標指定 int polygonY = 150; int x1[] = {75, 20, 40, 110, 130}; int y1[] = {polygonY+20, polygonY+40, polygonY+80, polygonY+80, polygonY+40}; int x2[] = {75+a, 20+a, 40+a, 110+a, 130+a}; int y2[] = y1; //多角形・線:各頂点x座標配列,各頂点y座標配列,頂点数 g.drawPolygon(x1, y1, 5); //多角形・塗:各頂点x座標配列,各頂点y座標配列,頂点数 g.fillPolygon(x2, y2, 5); } } ■イベント //JavaAppletSample import java.applet.*; import java.awt.*; public class JavaAppletSample extends Applet{ int xMouseDown = 20; int yMouseDown = 20; String strMouseDown; int xMouseUp = 20; int yMouseUp = 40; String strMouseUp; int xMouseDrag = 20; int yMouseDrag = 60; String strMouseDrag; int xMouseMove = 20; int yMouseMove = 80; String strMouseMove; int xKeyCode = 20; int yKeyCode = 100; int keyCode = 0; int xKeyEvent = 20; int yKeyEvent = 120; int xKeyEventOrg = xKeyEvent; int yKeyEventOrg = yKeyEvent; int KeyEvent = 0; String strKeyEvent; public void init(){ strMouseDown = "MouseDown"; strMouseUp = "MouseUp"; strMouseDrag = "MouseDrag"; strMouseMove = "MouseMove"; strKeyEvent = "KeyEvent"; } public void paint(Graphics g){ g.drawString(strMouseDown, xMouseDown, yMouseDown); g.drawString(strMouseUp, xMouseUp, yMouseUp); g.drawString(strMouseDrag, xMouseDrag, yMouseDrag); g.drawString(strMouseMove, xMouseMove, yMouseMove); g.drawString("keycode : " + keyCode, xKeyCode, yKeyCode); g.drawString(strKeyEvent, xKeyEvent, yKeyEvent); } public boolean mouseDown(Event e, int x, int y){ //mouseDownイベント xMouseDown = x; yMouseDown = y; repaint(); return true; } public boolean mouseUp(Event e, int x, int y){ //mouseUpイベント xMouseUp = x; yMouseUp = y; repaint(); return true; } public boolean mouseDrag(Event e, int x, int y){ //mouseDragイベント xMouseDrag = x; yMouseDrag = y; repaint(); return true; } public boolean mouseMove(Event e, int x, int y){ //mouseMoveイベント xMouseMove = x; yMouseMove = y; repaint(); return true; } public boolean keyDown(Event e, int key){ //keyDownイベント /* 「→」:RIGHT 「←」:LEFT 「↑」:UP 「↓」:DOWN 「ENTER」:ENTER 「Page Up」:PGUP 「Page Down」:PGDN 「Home」:HOME 「End」:END 「F1」~「F12」:F1~F12 「Shift」:SHIFT_MASK 「Ctrl」:CTRL_MASK 「Alt」:ALT_MASK */ keyCode = key; if((e.modifiers & e.SHIFT_MASK) != 0){ KeyEvent = 50; }else{ KeyEvent = 10; } if(key == e.RIGHT){ xKeyEvent = xKeyEvent + KeyEvent; } if(key == e.LEFT){ xKeyEvent = xKeyEvent - KeyEvent; } if(key == e.UP){ yKeyEvent = yKeyEvent - KeyEvent; } if(key == e.DOWN){ yKeyEvent = yKeyEvent + KeyEvent; } if(key == e.ENTER){ xKeyEvent = xKeyEventOrg; yKeyEvent = yKeyEventOrg; } repaint(); return true; } } ■スレッド //JavaAppletSample import java.applet.*; import java.awt.*; public class JavaAppletSample extends Applet implements Runnable{ Thread thread = null; int number[] = new int[10]; int i = 0; int count = 0; Image img[] = new Image[10]; //画像を全て読み込んでから表示を開始する //画像の状態をチェックする MediaTracker tracker = new MediaTracker(this); Image buff; Graphics g2; //イベントフラグ boolean flag = false; public void init(){ //数字の0~9の配列作成 //0.gif~9.gifを読み込む for(i=0;i<10;i++){ number[i] = i; img[i] = getImage(getDocumentBase(), i + ".gif"); tracker.addImage(img[i], 0); } buff = createImage(getWidth(), getHeight()); g2 = buff.getGraphics(); } public void start(){ if(thread == null){ thread = new Thread(this); thread.start(); } } public void run(){ try{ tracker.waitForID(0); }catch(InterruptedException e){ return; } while(true){ if(!flag){ try{ //ミリ秒 thread.sleep(500); count++; if(count >= 10){ count = 0; } repaint(); }catch(InterruptedException e){ } } } } //public void update(Graphics g){ // paint(g); //} public void paint(Graphics g){ if(tracker.checkID(0)){ g.drawString("count : " + count, 20, 20); g.drawString("number : " + number[count], 20, 50); g.drawImage(img[count], 20, 80, this); //g2.drawImage(img[count], 20, 80, this); //g.drawImage(buff, 0, 0, null); }else{ g.drawString("Now Loading...", 20, 50); } } public void stop(){ if(thread != null){ thread = null; } } public boolean mouseDown(Event e, int x, int y){ flag =! flag; return true; } } ■ボタン //JavaAppletSample import java.applet.Applet; import java.awt.*; public class JavaAppletSample extends Applet{ String str = ""; Button nb1, nb2; boolean flag = false; public void init(){ add(nb1 = new Button("O N")); add(nb2 = new Button("Disp")); nb2.setBackground(new Color(50, 200, 0)); nb2.setForeground(new Color(180, 50, 180)); nb2.setFont(new Font("TimesRoman", Font.ITALIC, 15)); } public void paint(Graphics g){ g.drawString(str, 10, 60); } public boolean action(Event e, Object o){ if(e.target == nb1){ if(flag){ nb1.setLabel("O N"); }else{ nb1.setLabel("OFF"); flag =! flag; } }else if(e.target == nb2){ str = nb1.getLabel(); } repaint(); return true; } } ■ラベル //JavaAppletSample import java.applet.Applet; import java.awt.*; public class JavaAppletSample extends Applet{ Label nl1, nl2; String str = ""; boolean flag = false; public void init(){ add(nl1 = new Label("L1")); add(nl2 = new Label("L2")); add(new Button("Click")); nl2.setBackground(new Color(80, 100, 200)); nl2.setForeground(new Color(0, 200, 50)); nl2.setFont(new Font("TimesRoman", Font.BOLD, 15)); } public void paint(Graphics g){ g.drawString(str, 10, 60); } public boolean action(Event e, Object o){ if(flag){ str = nl2.getText(); nl2.setText("L2"); }else{ str = nl1.getText(); nl2.setText("L3"); } flag =! flag; repaint(); return true; } } ■テキストボックス //JavaAppletSample import java.applet.Applet; import java.awt.*; public class JavaAppletSample extends Applet{ String str = ""; TextField nt1, nt2; public void init(){ add(nt1 = new TextField("", 10)); add(nt2 = new TextField("text", 15)); nt2.setBackground(new Color(50, 50, 200)); nt2.setForeground(new Color(255, 0, 0)); nt2.setFont(new Font("TimesRoman", Font.ITALIC, 15)); } public void paint(Graphics g){ g.drawString(str, 10, 60); } public boolean action(Event e, Object o){ str = nt1.getText(); nt2.setText(str); repaint(); return true; } } ■テキストエリア //JavaAppletSample import java.applet.Applet; import java.awt.*; public class JavaAppletSample extends Applet{ String str = ""; TextArea nt1, nt2; public void init(){ add(nt1 = new TextArea("", 1, 10)); add(nt2 = new TextArea("text", 2, 10)); add(new Button("Click")); nt2.setBackground(new Color(0, 0, 0)); nt2.setForeground(new Color(0, 0, 255)); nt2.setFont(new Font("TimesRoman", Font.BOLD, 15)); } public void paint(Graphics g){ g.drawString(str, 10, 60); } public boolean action(Event e, Object o){ str = nt1.getText(); nt2.setText(str); repaint(); return true; } } ■チェックボックス //JavaAppletSample import java.applet.Applet; import java.awt.*; public class JavaAppletSample extends Applet{ String str = ""; Checkbox nc1, nc2; public void init(){ add(nc1 = new Checkbox("O N")); add(nc2 = new Checkbox("CHB")); nc2.setBackground(new Color(150, 50, 100)); nc2.setForeground(new Color(10, 200, 0)); nc2.setFont(new Font("TimesRoman", Font.ITALIC, 15)); } public void paint(Graphics g){ g.drawString(str, 10, 60); } public boolean action(Event e, Object o){ if(e.target == nc1){ if(nc1.getState()){ nc1.setLabel("OFF"); }else{ nc1.setLabel("O N"); } }else if(e.target == nc2){ if(nc2.getState()){ str = nc1.getLabel(); }else{ str = ""; } } repaint(); return true; } } ■ラジオボタン //JavaAppletSample import java.applet.Applet; import java.awt.*; public class JavaAppletSample extends Applet{ String str = ""; Checkbox nc1, nc2; boolean flag = false; public void init(){ CheckboxGroup chg = new CheckboxGroup(); add(nc1 = new Checkbox("O N",chg,false)); add(nc2 = new Checkbox("CHB",chg,true)); nc2.setBackground(new Color(70, 200, 100)); nc2.setForeground(new Color(30, 0, 180)); nc2.setFont(new Font("TimesRoman", Font.ITALIC, 15)); } public void paint(Graphics g){ g.drawString(str, 10, 60); } public boolean action(Event e, Object o){ if(e.target == nc1){ if(nc1.getState()){ if(flag){ nc1.setLabel("O N"); }else{ nc1.setLabel("OFF"); } flag =! flag; } }else if(e.target == nc2){ str = nc1.getLabel(); } repaint(); return true; } } ■選択ボックス //JavaAppletSample import java.applet.Applet; import java.awt.*; public class JavaAppletSample extends Applet{ String str = ""; Choice nc1, nc2; public void init(){ nc1 = new Choice(); nc1.addItem("CH1"); nc1.addItem("CH2"); nc1.addItem("CH3"); add(nc1); nc2 = new Choice(); nc2.addItem("CH1"); nc2.addItem("CH2"); nc2.addItem("CH3"); add(nc2); nc2.setBackground(new Color(70, 70, 190)); nc2.setForeground(new Color(150, 90, 0)); nc2.setFont(new Font("TimesRoman", Font.ITALIC, 15)); } public void paint(Graphics g){ g.drawString(str, 10, 60); } public boolean action(Event e, Object o){ if(e.target == nc1){ str = nc1.getSelectedItem(); }else if(e.target == nc2){ nc1.select(nc2.getSelectedIndex()); } repaint(); return true; } } ■リストボックス //JavaAppletSample import java.applet.Applet; import java.awt.*; public class JavaAppletSample extends Applet{ String str = ""; List nl1, nl2; public void init(){ nl1 = new List(); nl1.add("CH1"); nl1.add("CH2"); nl1.add("CH3"); add(nl1); nl2 = new List(); nl2.add("CH1"); nl2.add("CH2"); nl2.add("CH3"); add(nl2); nl2.setBackground(new Color(250, 150, 10)); nl2.setForeground(new Color(10, 50, 190)); nl2.setFont(new Font("TimesRoman", Font.ITALIC, 15)); } public void paint(Graphics g){ g.drawString(str, 10, 60); } public boolean action(Event e, Object o){ if(e.target == nl1){ str = nl1.getSelectedItem(); }else if(e.target == nl2){ nl1.select(nl2.getSelectedIndex()); } repaint(); return true; } } ■スクロールバー //JavaAppletSample import java.applet.Applet; import java.awt.*; public class JavaAppletSample extends Applet{ String str = ""; Scrollbar ns1, ns2; public void init(){ add(ns1 = new Scrollbar(Scrollbar.HORIZONTAL, 0, 0, 0, 200)); add(ns2 = new Scrollbar(Scrollbar.VERTICAL, 0, 0, 0, 50)); ns2.setBackground(new Color(0, 250, 150)); ns2.setForeground(new Color(150, 90, 0)); } public void paint(Graphics g){ g.drawString(str, 10, 60); } public boolean handleEvent(Event e){ if(e.target == ns1){ str = "最大値:" + ns1.getMaximum() + " / 最小値:" + ns1.getMinimum() + " / 現在値:" + ns1.getValue(); }else if(e.target == ns2){ ns1.setValue(ns2.getValue() * 4); } repaint(); return true; } } ■複数のGUI判定(同じGUI) //JavaAppletSample import java.applet.Applet; import java.awt.*; public class JavaAppletSample extends Applet{ String str = ""; Button nb1, nb2, nb3, nb4; public void init(){ add(new Button("ボタン1")); add(new Button("ボタン2")); add(new Button("ボタン3")); add(new Button("ボタン4")); } public void paint(Graphics g){ g.drawString(str, 10, 60); } public boolean action(Event e, Object o){ Button nb = (Button)(e.target); if(nb.getLabel().equals("ボタン1")){ str = (String)o; }else if(nb.getLabel().equals("ボタン2")){ str = (String)o; }else if(nb.getLabel().equals("ボタン3")){ str = (String)o; }else if(nb.getLabel().equals("ボタン4")){ str = (String)o; } repaint(); return true; } } ■複数のGUI判定(違うGUI) //JavaAppletSample import java.applet.Applet; import java.awt.*; public class JavaAppletSample extends Applet{ Button nb; Checkbox nc; public void init(){ add(new Button("青")); add(new Checkbox("赤")); } public boolean action(Event e, Object o){ if(e.target instanceof Button){ setBackground(new Color(0, 0, 255)); }else if(e.target instanceof Checkbox){ setBackground(new Color(255, 0, 0)); } repaint(); return true; } } ■FlowLayout / 横1列 //JavaAppletSample import java.applet.Applet; import java.awt.*; public class JavaAppletSample extends Applet{ int i; public void init(){ //ALIGN, 水平方向空白, 垂直方向空白 //LEFT、CENTER、RIGHT setLayout(new FlowLayout(FlowLayout.RIGHT, 3, 6)); for(i=0;i<7;i++){ add(new Button(Integer.toString(i))); } } } ■BorderLayout / 上下左右真ん中 //JavaAppletSample import java.applet.Applet; import java.awt.*; public class JavaAppletSample extends Applet{ public void init(){ //BorderLayout:Center,East,West,South,North setLayout(new BorderLayout()); add("Center", new Button("ボタン1")); add("East", new Button("ボタン2")); add("West", new Button("ボタン3")); add("South", new Button("ボタン4")); add("North", new Button("ボタン5")); } } ■GridLayout / 格子状 //JavaAppletSample import java.applet.Applet; import java.awt.*; public class JavaAppletSample extends Applet{ int i; public void init(){ //GridLayout:行数,列数,行間幅,列間幅 setLayout(new GridLayout(4, 4, 1, 3)); for(i=0;i<16;i++){ add(new Button(Integer.toString(i))); } } } ■GridBagLayout / 不規則な格子状 //JavaAppletSample import java.applet.Applet; import java.awt.*; public class JavaAppletSample extends Applet{ GridBagLayout gbl; GridBagConstraints gbc; public void init(){ gbl = new GridBagLayout(); gbc = new GridBagConstraints(); Button nb; setLayout(gbl); //BOTH(全領域),HORIZONTAL(横方向全域),VERTICAL(縦方向全域),NONE(設定しない) gbc.fill = GridBagConstraints.BOTH; gbl.setConstraints(nb = new Button("ボタン1"),gbc); add(nb); gbl.setConstraints(nb = new Button("ボタン2"),gbc); add(nb); gbl.setConstraints(nb = new Button("ボタン3"),gbc); add(nb); //「REMAINDER」グリッド配置するGUI部品が末行or列 gbc.gridwidth = GridBagConstraints.REMAINDER; gbl.setConstraints(nb = new Button("ボタン4"),gbc); add(nb); gbc.gridwidth = 3; gbc.gridheight = 2; //「RELATIVE」グリッド配置するGUI部品が次の行or列で終了 gbc.gridwidth = GridBagConstraints.RELATIVE; gbl.setConstraints(nb = new Button("ボタン5"),gbc); add(nb); gbc.gridwidth = 1; gbc.gridheight = 1; gbc.gridwidth = GridBagConstraints.REMAINDER; gbl.setConstraints(nb = new Button("ボタン6"),gbc); add(nb); gbl.setConstraints(nb = new Button("ボタン7"),gbc); add(nb); } } ■CardLayout / 重ね表示 ・サンプル1 //JavaAppletSample import java.applet.Applet; import java.awt.*; public class JavaAppletSample extends Applet{ Button bt[]; CardLayout cl; int i; public void init() { //CardLayout,水平方向空白,垂直方向空白 cl = new CardLayout(50, 10); bt = new Button[10]; for(i=0;i<10;i++){ bt[i] = new Button("ボタン" + i); add(bt[i]); } setLayout(cl); } public boolean action(Event e, Object o){ //next, previous cl.next(this); return true; } } ・サンプル2 / 画像切り替え //JavaAppletSample import java.applet.Applet; import java.awt.*; public class JavaAppletSample extends Applet{ Panel p = new Panel(); CardLayout CL; int i = 0; Image img; public void init(){ CL = new CardLayout(50, 10); for(i=0;i<10;i++){ img = getImage(getDocumentBase(), i + ".gif"); p.add(new JavaAppletSampleC(img)); } p.setLayout(CL); setLayout(new BorderLayout()); add("Center", p); add("East", new Button("進む")); add("West", new Button("戻る")); } public boolean action(Event e, Object o){ if(o.equals("進む")){ CL.next(p); }else{ CL.previous(p); } return true; } } class JavaAppletSampleC extends Canvas{ Image img; public JavaAppletSampleC(Image i){ img = i; } public void paint(Graphics g){ g.drawImage(img, 0, 0, getWidth(), getHeight(), this); } } ■キャンバス //JavaAppletSample import java.applet.Applet; import java.awt.*; public class JavaAppletSample extends Applet{ int i = 0; Image img; Panel p = new Panel(); public void init(){ //GridLayout:行数,列数,行間幅,列間幅 for(i=0;i<4;i++){ img = getImage(getDocumentBase(), i + ".gif"); p.add(new JavaAppletSampleC(img)); } p.setLayout(new GridLayout(2, 2)); setLayout(new BorderLayout()); add("Center", p); add("South", new Button("ボタン1")); add("North", new Button("ボタン2")); add("East", new Button("ボタン3")); add("West", new Button("ボタン4")); } } class JavaAppletSampleC extends Canvas{ Image img; public JavaAppletSampleC(Image i){ img = i; } public void paint(Graphics g){ g.drawImage(img, 0, 0, getWidth(), getHeight(), this); } } ■フレーム / ウィンドウオープン //JavaAppletSample import java.applet.Applet; import java.awt.*; public class JavaAppletSample extends Applet{ JavaAppletSample2 nf; Graphics g; Button nb1, nb2; public void init(){ add(nb1 = new Button("Frame Open")); add(nb2 = new Button("四角形描画")); nf = new JavaAppletSample2("New Frame"); } public boolean action(Event e, Object o){ if(e.target == nb2){ g.fillRect(60, 60, 150, 150); }else{ g = nf.init(); } return true; } } class JavaAppletSample2 extends Frame{ Button nb3; public JavaAppletSample2(String t){ setTitle(t); setLayout(new FlowLayout()); add(new Label("ダイアログ")); add(nb3 = new Button("OK")); setSize(400, 400); } public Graphics init(){ setBackground(new Color(20, 170, 255)); show(); repaint(); return getGraphics(); } public boolean action(Event e, Object o){ if(e.target == nb3){ hide(); } return true; } public void paint(Graphics g2){ g2.drawString("New Frame", 50, 50); } } ■ダイアログ //JavaAppletSample import java.applet.Applet; import java.awt.*; public class JavaAppletSample extends Applet{ JavaAppletSample2 nd; Graphics g; Button nb1, nb2; public void init(){ add(nb1 = new Button("Dialog Open")); add(nb2 = new Button("四角形描画")); nd = new JavaAppletSample2(new Frame()); } public boolean action(Event e, Object o){ if(e.target == nb2){ g.fillRect(60, 60, 150, 150); }else{ g = nd.init(); } return true; } } class JavaAppletSample2 extends Dialog{ Button nb3; public JavaAppletSample2(Frame parent){ //所有者,タイトル,処理可否 //true:ダイアログが閉じるまで次の処理を行わない //false:ダイアログが開いている間も処理を行う super(parent, "New Dialog", false); setLayout(new FlowLayout()); add(new Label("ダイアログ")); add(nb3 = new Button("OK")); setSize(400, 400); } public Graphics init(){ setBackground(new Color(0, 140, 60)); show(); repaint(); return getGraphics(); } public boolean action(Event e, Object o){ if(e.target == nb3){ hide(); } return true; } public void paint(Graphics g2){ g2.drawString("New Dialog", 50, 50); } } ■メニュー //JavaAppletSample import java.applet.Applet; import java.awt.*; public class JavaAppletSample extends Applet{ JavaAppletSample2 nm; Graphics g; public void init(){ add(new Button("Menu Open")); nm = new JavaAppletSample2("New Menu"); } public boolean action(Event e, Object o){ nm.init(); return true; } } class JavaAppletSample2 extends Frame{ MenuItem mi1, mi2; public JavaAppletSample2(String t){ setTitle(t); setSize(400, 400); } public void init(){ MenuBar nmb = new MenuBar(); Menu mf = new Menu("ファイル"); mf.add(mi1 = new MenuItem("円描画")); mf.addSeparator(); mf.add(mi2 = new MenuItem("終了")); nmb.add(mf); setMenuBar(nmb); setBackground(new Color(230, 20, 90)); show(); } public boolean action(Event e, Object o){ Graphics g = getGraphics(); if(e.target == mi1){ g.fillOval(100, 100, 150, 150); }else if(e.target == mi2){ hide(); } return true; } } ■アプリケーションサンプル / ウィンドウ表示 //JavaAppli.java import java.awt.*; class JavaAppli extends Frame{ public static void main(String args[]){ JavaAppli g = new JavaAppli(); g.show(); } JavaAppli(){ setLayout(new FlowLayout()); add(new Button("Java Application")); setBackground(new Color(200, 50, 150)); setSize(300, 100); } public boolean action(Event e, Object o){ System.exit(0); return true; } } ■アプリケーションサンプル / RGBカラー表示 import java.awt.*; import java.awt.event.*; public class RgbColor extends Frame{ Scrollbar ns1, ns2, ns3; Label nl1, nl2, nl3, nl4; int ns1v, ns2v, ns3v; String str16r, str16g, str16b; public static void main(String args[]){ RgbColor g = new RgbColor(); g.setTitle("RGB COLOR"); g.show(); } RgbColor(){ addWindowListener(new RgbExit()); //パネルの設定 Panel p = new Panel(); p.setLayout(new GridLayout(3, 2)); p.add(nl2 = new Label("Red")); p.add(ns1 = new Scrollbar(Scrollbar.HORIZONTAL, 0, 0, 0, 256)); p.add(nl3 = new Label("Green")); p.add(ns2 = new Scrollbar(Scrollbar.HORIZONTAL, 0, 0, 0, 256)); p.add(nl4 = new Label("Blue")); p.add(ns3 = new Scrollbar(Scrollbar.HORIZONTAL, 0, 0, 0, 256)); nl2.setBackground(new Color(255, 0, 0)); nl3.setBackground(new Color(0, 255, 0)); nl4.setBackground(new Color(0, 0, 255)); add(p); //フレームにレイアウト setLayout(new BorderLayout()); add("North", p); add("South", nl1 = new Label("10進数:0,0,0 / 16進数:#000000")); nl1.setBackground(new Color(200, 200, 200)); setBackground(new Color(0, 0, 0)); setSize(300, 300); } public boolean handleEvent(Event e){ if(e.target instanceof Scrollbar){ //スクロールバーの値を取得 ns1v = ns1.getValue(); ns2v = ns2.getValue(); ns3v = ns3.getValue(); //背景色を設定 setBackground(new Color(ns1v, ns2v, ns3v)); if(ns1v < 16){ str16r = "0" + Integer.toHexString(ns1v); }else{ str16r = Integer.toHexString(ns1v); } if(ns2v < 16){ str16g = "0" + Integer.toHexString(ns2v); }else{ str16g = Integer.toHexString(ns2v); } if(ns3v < 16){ str16b = "0" + Integer.toHexString(ns3v); }else{ str16b = Integer.toHexString(ns3v); } //進数表示 nl1.setText("10進数:" + ns1v + "," + ns2v + "," + ns3v + " / 16進数:#" + str16r + str16g + str16b ); } repaint(); return true; } //終了ボタンの処理 class RgbExit extends WindowAdapter{ public void windowClosing(WindowEvent e){ System.exit( 0 ); } } }