約 3,963,783 件
https://w.atwiki.jp/wiki6_takt/pages/9.html
Eclipse Eclipse起動オプション Eclipse.exe -VM c \java\javaw.exe -VMargs -Vms256M -Vmx512M -VM JVMの指定 -VMargs JVMへの引数 [-Vms 最小HeapSize][-Vmx 最大HeapSize] 文字化け WebSphereなどのIBM製品を使用し、Windows環境で作成した「shift_jis」文字CODEと 「euc」や「iso2022-jp」文字CODEのテキストとの相互変換を行い文字化けをする時があるようで対象となる文字は・・ 「∥」二重縦線 「~」波線 「-」記号(マイナス) 「¢」記号(セント) 「£」記号(ポンド) 「¬」記号(ノット) 理由は、Windows環境で作成した「shift_jis」の文字CODEが、 「MS932」文字CODEとして保存される為。 □補足 「MS932」文字CODEとはMicroSoft社が定義をした文字CODE。 上記の6文字の文字CODEが「shift_jis」と異なる。 他に"①"などの機種依存文字も含む文字CODE。 「shift_jis」, 「euc-jp」, 「iso2022-jp」は, 「JIS X 0208」として定義されている。 各文字コード一覧 MS932 SJIS EUC-JP ISO-2022-JP ~ 0xFF5E 0x301C 0x301C 0x301C ∥ 0x2225 0x2016 0x2016 0x2016 - 0xFF0D 0x2212 0x2212 0x2212 ¢ 0xFFE0 0x00A2 0x00A2 0x00A2 £ 0xFFE1 0x00A3 0x00A3 0x00A3 ¬ 0xFFE2 0x00AC 0x00AC 0x00AC □文字化けの原因 IBM製品で取り扱う文字コードの種類は 「MS932」「shift_jis」「euc-jp」「iso2022-jp」と4種類あり(utf-8とutf-16は除く)、 「shift_jis」「euc-jp」「iso2022-jp」の3種類の中で相互に文字CODEの変換を行う分には文字化けはしないが、「MS932」との変換を行うと文字化けする。 つまり MS932←→shift_jis MS932←→euc-jp MS932←→iso2022-jp は、文字化けする。 shift_jis←→shift_jis/euc-jp/iso2022-jp euc-jp←→shift_jis/euc-jp/iso2022-jp iso2022-jp←→shift_jis/euc-jp/iso2022-jp は、文字化けしない。 □ASTERIAの各バージョンによる文字コードの取り扱い ASTERIA R2で使用する文字コードは以下のようになります。 "shift_jis"→MS932文字コードとして取り扱いをします。 "SJIS"→shift_jis文字コードとして取り扱いをします。 "euc-jp"→euc-jp文字コードとして取り扱いをします。 "iso2022-jp"→iso2022-jp文字コードとして取り扱いをします。 注)Windows環境で作成したテキストは"shift_jis"と指定するだけで読み込みが可能です。 ASTERIA 3で使用する文字コードは以下のようになります。 "shift_jis"→shift_jis文字コードとして取り扱いをします。 "Windows-31J"→MS932文字コードとして取り扱いをします。 "euc-jp"→euc-jp文字コードとして取り扱いをします。 "iso2022-jp"→iso2022-jp文字コードとして取り扱いをします。 注)Windows環境で作成したテキストは明示的に"Windows-31J"と指定することで読み込みが可能です。 "shift_jis"の指定の場合には上記文字コードの場合には文字化けをします。 ASTERIA R2とASTERIA3で指定方法が異なるのは、ASTERIAが使用しているJava環境のバージョンの違いによるものです。 □文字化けの解消 ASTERIAでMS932とshift_jis, euc-jp, iso2022-jpの相互に文字コードを変換する場合には、 別途提供しておりますJava関数を使用することで文字化けを解消することができます。 例) MS932文字コード ↓ Java関数(A) ↓ shift_jis euc-jp iso2022-jp shift_jis euc-jp iso2022-jp ↓ Java関数(B) ↓ MS932文字コード Java関数(A) MS932文字コードのテキストをASTERIAのString型に読み込むときにJIS X 0208として変換を行います。 この変換によりString型からshift_jis, euc-jp, iso2022-jpへの相互変換においての文字化けが解消いたします。 # #String s = in[0].strValue(); #int len = s.length(); #StringBuffer buf =new StringBuffer(len); #for (int i=0; i len; i++) { # char c = s.charAt(i); # switch (c) { # case uFF5E c = u301C ; break; # case u2225 c = u2016 ; break; # case uFF0D c = u2212 ; break; # case uFFE0 c = u00A2 ; break; # case uFFE1 c = u00A3 ; break; # case uFFE2 c = u00AC ; break; # } # buf.append(c); #} #out.setValue(buf.toString()); # Java関数(B) JIS X 0208のテキストをASTERIAのString型からMS932として変換を行います。 この変換によりJIS X 0208(String型)からMS932への変換においての文字化けが解消いたします。 # #String s = in[0].strValue(); #int len = s.length(); #StringBuffer buf =new StringBuffer(len); # for (int i=0; i len; i++) { # char c = s.charAt(i); # switch (c) { # case u301C c = uFF5E ; break; # case u2016 c = u2225 ; break; # case u2212 c = uFF0D ; break; # case u00A2 c = uFFE0 ; break; # case u00A3 c = uFFE1 ; break; # case u00AC c = uFFE2 ; break; # } # buf.append(c); #} #out.setValue(buf.toString()); # Java関数(A)ではinputdata_AにはMS932文字コードを含む文字列が定義されていることを想定し、outputdata_AにはJIS X 0208に変換したテキストを出力します。 Java関数(B)ではinputdata_BにはJIS X 0208を含む文字列が定義されていることを想定し、outputdata_BにはMS932文字コードに変換したテキストを出力します。 注)これらの関数は文字数が増加するに従い条件判断の回数も増加するため、処理速度は文字数に比例してかかることとなります。
https://w.atwiki.jp/freebsd/pages/185.html
java/jdk15 java/diablo-jdk15 java/jdk16 java/diablo-jdk16
https://w.atwiki.jp/syusei/pages/4.html
Java Java Technology Java API Reference Bug Database Sun Developer Connection dev.java.net Java Community Process JCP 日本語 JavaOne Online Java Tutorial Java Blue Print Catalog Swing Labs Swing Sample Glassfish Java Tips JavaSE5.0の新機能 J2SE5.0虎の穴 Java SE 6 Mustang新機能 Nishigaya's Weblog Java-Source.net てんぷらメモ JavaSE6でのパフォーマンスの監視と診断 JMonkeyEngine
https://w.atwiki.jp/ipu-softy/pages/82.html
開発環境の準備 下のページから 「JREあり」の「Java」のを落とせ。 解凍したら終わりだ。たぶんな。 http //mergedoc.sourceforge.jp/index.html#/pleiades_distros4.2.html 管理者権限が必要そうなら教授に言え。すぐに対応してくれる。 してくれないならその研究室はやめとけ。 おまじない public class Hoge { public static void main (String[] args) { // ここに何か書けば動く System.out.println("あいうえお"); } } ぬるぽ nullチェックしろクズ SWT, AWT, Swing が混在したGUIを作りたい 大先輩が残していった研究成果がSwingでつくってあった、でも自分はSWTを使いたい。(その逆でもおk) そんな人に便利。 Composite composite = new Composite(parent, SWT.EMBEDDED | SWT.NO_BACKGROUND); Frame frame = SWT_AWT.new_Frame(composite); できるにはできるけど、こんなことやってると糞コードが出来上がるから 0から全部書き直そうね。
https://w.atwiki.jp/kerikerikeri/pages/26.html
Javaの部屋 ■java.new.URLクラス リモートファイルもローカルファイルも同一のアクセスが可能。 ▽HTTPリソースの場合(http //www26.atwiki.jp/kerikerikeri/pages/26.html) URL url = new URL("http //www26.atwiki.jp/kerikerikeri/pages/26.html"); ▽ファイルリソースの場合(file //c /Documents and Settings/guest/readme.txt) URL url2 = new URL("file //c /Documents and Settings/guest/readme.txt"); サンプルソース import java.io.*; import java.net.*; class TestUrl{ public static void main(String args){ BufferedReader reader = null; try{ URL url = new URL("http //www26.atwiki.jp/kerikerikeri/pages/26.html"); reader = new BufferedReader(new InputStreamReader(url.openStream(),"UTF-8")); while((line=reader.readLine()) != null){ System.out.println(line); } }catch(Exception e){ } } ■DataHandlerクラス SOAP Attachmentで使うDataHandlerクラスを使ってみる。 実装サンプル import javax.activation.*; import java.io.*; FileDataSource fds = new FileDataSource(new File("パス","ファイル名")); /** DataHandler生成 */ DataHandler dh = new DataHandler(fds); /** byte[]に格納 */ ByteArrayOutputStream baos = new ByteArrayOutputStream(); dh.getOutputStream(baos); byte[] b = baos.toByteArray(); ■ミリ秒を表示する java.util.Dateクラス java.text.DateFormatクラス java.text.SimpleDateFormatクラス Date date = new Date(); DateFormat dateformat = new SimpleDateFormat("yyyyMMdd HH mm ss.SSS"); dateformat.format(date); 実行結果 20070217 01 55 24.499
https://w.atwiki.jp/oit-archive/pages/31.html
work81.java import java.awt.*;import java.applet.*; public class work81 extends Applet { public void paint(Graphics g) {Color c1, c2, c3, c4; // c1 を生成c1 = new Color(64, 128, 160); g.setColor(c1);g.fillRect(20, 20, 70, 70); // c2 を生成c2 = new Color(0Xc1fe80);g.setColor(c2);g.fillRect(90, 20, 70, 70); // c3 を生成float red, green, blue;red = (float)(Math.random());green = (float)(Math.random());blue = (float)(Math.random());c3 = new Color(red, green, blue); g.setColor(c3);g.fillRect(160, 20, 70, 70); // c4 を生成c4 = new Color(120, 220, 250, 128);g.setColor(c4);g.fillRect(20, 60, 210, 70); }} work82.java class work82 { public static void main(String[] args) {Student82 p1 = new Student82(800999, "若馬 大輔");Student82 p2 = new Student82(900999, "入門 若葉", 61); p1.addCredits(45);p1.show();System.out.println("-------------------------");p2.show(); System.out.println("========================="); p1.addCredits(34);p1.show();System.out.println("-------------------------");p2.addCredits(-10);p2.show(); }} Student82.java class Student82 { static private final int minimumCredits = 124; // 卒業必要単位数 private int id; // 学生番号 private String name; // 名前 private int credits = 0; // 単位数 Student82(int i, String n){setData(i, n); } Student82(int i, String n, int c){setData(i, n);credits=c; } void show() {System.out.println("学生番号 " + id);System.out.println("名前 " + name);System.out.println("単位数 " + getCredits());System.out.println("必要単位 " + creditsRemainder()); } int getCredits() {return credits; } void setData(int i, String n) { id = i;name = n; } void addCredits(int n) {if (n 0) { credits = credits + n;} } int creditsRemainder() {int rem = minimumCredits - credits;if (rem 0) { rem = 0;}return rem; } } work83.java class work83 { public static void main(String[] args) {Dimension83 p1 = new Dimension83(10, 20);Dimension83 p2 = new Dimension83(30);Dimension83 p3 = new Dimension83(123, 45);/*p1.setSize(10, 20);p1.show(); p2.setSize(30, 30);p2.show(); p3.setSize(123, 45);p3.show();*/ p1.show();p2.show();p3.show(); System.out.println("2 番目の正方形のサイズを変更後表示"); p2.setSize(50, 20);p1.show();p2.show();p3.show(); }} Dimension83.java class Dimension83 { private int w; private int h; Dimension83(int w0, int h0){setSize(w0, h0); } Dimension83(int w0){setSize(w0, w0); } void setSize(int w0, int h0){w = w0;h = h0; } /* System.out.println("正方形領域(" + w + " X " + h + ") 面積 = " + w * h); */ void show(){if(w == h){ System.out.print("正方形領域(");}else { System.out.print("長方形領域(");}System.out.println(w + " X " + h + ") 面積 = "+ w * h); }} work84.java import java.awt.*;import java.applet.*; public class work84 extends Applet{ public void paint(Graphics g) {PacMan84 p1 = new PacMan84(40, 45);PacMan84 p2 = new PacMan84(120, 25, 100);/*p1.setData(40, 45, 60);p1.draw(g);p2.setData(120, 25, 100);p2.draw(g);*/ p1.draw(g);p2.draw(g); }} PacMan84.java import java.awt.*;import java.applet.*; public class work84 extends Applet{ public void paint(Graphics g) {PacMan84 p1 = new PacMan84(40, 45);PacMan84 p2 = new PacMan84(120, 25, 100);/*p1.setData(40, 45, 60);p1.draw(g);p2.setData(120, 25, 100);p2.draw(g);*/ p1.draw(g);p2.draw(g); }} work85.java import java.awt.*;import java.applet.*; public class work85 extends Applet{ public void paint(Graphics g){PacMan85 p1=new PacMan85(10,80);for(int i=0;i 4;i++){ p1.draw(g); p1.move(120,-20); p1.enLarge();} PacMan85 p2=new PacMan85(20,20,20);for(int i=0;i 4;i++){p2.draw(g);p2.move(25);p2.enLarge(1.2);} }} PacMan85.java import java.awt.*; class PacMan85 { private int x; private int y; private int size; PacMan85(int x0,int y0,int s0){setData(x0,y0,s0); } PacMan85(int x0,int y0){setData(x0,y0,60); } void setData(int x0,int y0,int s0){x=x0;y=y0;size=s0; } void move(int dx,int dy){x=x+dx;y=y+dy; } void move(int d){move(d,d); } void enLarge(double mag){size=(int)(size*mag); } void enLarge(){size=(int)(size*1.1); } void draw(Graphics g){g.setColor(Color.pink);g.fillArc(x, y, size, size, 45, 300);g.setColor(Color.black);g.fillOval(x + size / 2, y + size / 12, size / 6, size / 6); }} work86.java class work86 { public static void main(String[] args) {Hurrah86 p1= new Hurrah86("井上","がんば!",4);Hurrah86 p2= new Hurrah86("斉藤","読め!",3);Hurrah86 p3= new Hurrah86("水谷","もうすこし",2);Hurrah86 p4= new Hurrah86("小西","ファイト!一発",2);p1.shout();p2.shout();p3.shout();p4.shout();p1.shout();p2.shout("もう諦めるのか?");p3.shout();p2.shout();p1.shout("がんばれ???");p1.shout();p3.shout("寝るな!");p3.shout();p4.shout("まだ 8 回目だぞ!");p4.shout(); }} Hurrah86.java class Hurrah86 { private String name; private String msg; Hurrah86(String n0, String m0, int c0) {name = n0;msg = "";for (int i = 0; i c0; i++) { msg = msg + m0 + " ";} } void shout() {shout(msg); } void shout(String word) {System.out.println(name + ":" + word); }} work87.java // BigInteger と BigDecimal クラスを使うために import するimport java.math.*; // 教科書 184?185 ページの「パッケージを使う」を読もうimport java.math.BigDecimal;import java.math.BigInteger; class work87 { public static void main(String[] args) {if (args.length == 4) { System.out.println("\n" + args[0] + " と"); System.out.println(args[1] + " の和差積商"); BigInteger p1 =new BigInteger(args[0]); BigInteger p2 =new BigInteger(args[1]); System.out.println("和 = "+ p1.add(p2) ); System.out.println("差 = "+ p1.subtract(p2) ); System.out.println("積 = "+ p1.multiply(p2) ); System.out.println("商 = "+ p1.divide(p2) ); BigDecimal p3 = new BigDecimal(args[2]); BigDecimal p4 = new BigDecimal(args[3]); System.out.println("\n" + args[2] + " と"); System.out.println(args[3] + " の和差"); System.out.println("和 = "+ p3.add(p4) ); System.out.println("差 = "+ p3.subtract(p4) ); System.out.println("\n" + args[2] + " と"); System.out.println(args[3] + " の和差を double で計算すると,"); Double d2 = Double.parseDouble(args[2]); Double d3 = Double.parseDouble(args[3]); System.out.println("和 = " + (d2 + d3)); System.out.println("差 = " + (d2 - d3)); System.out.println("\n" + args[0] + " と"); System.out.println(args[1] + " と"); System.out.println(args[3] + " の和"); BigDecimal p5 = new BigDecimal(p1.add(p2)); System.out.println("和 = " + p5.add(p4)); } else { System.out.println("引数を 4 個指定してください。" );} }}
https://w.atwiki.jp/java_pro/pages/50.html
public class Dog extends Pet{ public Dog(){ } public Dog(String name){ super(name); } public void call(){ System.out.println("ワンワン"); } }
https://w.atwiki.jp/pspt/pages/264.html
Java JavaはC→C++→Javaという立ち位置にある。世界中に多くのJava開発者がいるため、C言語同様にプログラマーの必修言語とされ、知っておいて損はない言語である。なお、Javaの習得は他の言語に比べやや難しいためC言語を習得した後に勉強することをお勧めする。 JavaJavaのインストール Hello WorldHello.java cmd 注意点 Androidアプリの開発開発環境の構築 参考サイト Javaのインストール 下記のリンク先から最新のJDKをインストールしよう。 Java SE Development Kit 8u5 Hello World 画面に「Hello, World!」の文字列を表示させよう。 1.編集 2.コンパイル 3.実行 Hello.javaを作成する javacコマンドでHello.javaをコンパイルする javaコマンドでhello.classを実行する Hello.java public class Hello { public static void main(String[] args){ System.out.println("Hello, world!"); } } cmd C \xxx\yyy\zzz javac Hello.java C \xxx\yyy\zzz java Hello 注意点 ユーザー環境変数PATHにC \Program Files\Java\jdk1.8.0_05\bin;を追加しておくこと。 C \xxx\yyy\zzz はHello.javaファイルが置いてあるディレクトリを指す。 javaコマンドは拡張子を必要としない。 Androidアプリの開発 Javaの扱いに慣れてきたらAndroidアプリを開発しよう。 開発環境の構築 Android SDK(←Eclipseが含まれている)をインストール SDK Manager.exeを起動して各ツールをインストール ユーザー環境変数PATHにC \xxx\yyy\zzz\sdk\platform-tools;C \xxx\yyy\zzz\sdk\tools;を追加 Pleiades - Eclipse プラグインをインストールしてEclipseを日本語化(任意) 参考サイト 一番かんたんなjava入門
https://w.atwiki.jp/javafx/pages/29.html
はじめてのJavaFX 元ネタ:http //jfx.wikia.com/wiki/Step_by_Step _How_to_build_your_first_JavaFX_application コンテンツ はじめに JavaFXの開発環境を整える JavaFXプログラミングHello World テキストフィールドの追加 マルチコンポーネントの利用 クリック時のイベント処理 Bindingの実装 トリガーの追加 top はじめに ただJavaFXのソースコードを眺めているだけではJavaFXを理解することはできません。そこで簡単なJavaFXアプリケーションを作りながらJavaFXについて学びます。 ここでは電卓を作ることを目標にします。電卓を作るために必要なテキストフィールドであったりボタン、ボタンイベント、JavaFXの特徴でもあるトリガーについて紹介します。それでは順番にJavaFXアプリケーションを作っていきましょう! top JavaFXの開発環境を整える ここではeclipseでの設定方法を紹介します。 eclipseの導入についてはチュートリアル/JavaFXの開発環境を整えるを参照して下さい。 JavaFXアプリケーションの作成準備 まず、新規プロジェクトからJavaのプロジェクトを作ります。このときプロジェクトの名前などは任意で構いません。又、特に設定をする必要もありません。 次にこのプロジェクトにJavaFXのファイルを追加します。さきほど作ったプロジェクト名の上で右クリックをして「新規」→「その他」をクリックします。そしてその中にあるJavaFX Fileを選択して次へ手順を進めれば完了です。 コンパイルする コンパイル・実行の際は、プログラムの引数にJavaFXのファイル名(xxx.fx)を指定する必要があります。 「構成及び実行」を開いて「JavaFX Application」をダブルクリックします。このときに引数を指定します。例えばHelloWorld.fxというファイルをコンパイル・実行したい場合は以下のような設定になります。 top JavaFXプログラミング Hello World まずは簡単な「Hello,World」アプリケーションを作ってみましょう。 import javafx.ui.*; Frame{ title "はじめてのJavaFX" width 200 height 50 content Label{ text "Hello,World" } visible true } 実行例: top テキストフィールドの追加 電卓を作る上でテキストフィールドは必要になってきます。さきほどのアプリケーションをテキストフィールドを使って表現してみましょう。 import javafx.ui.*; Frame{ title "はじめてのJavaFX" width 200 height 50 content TextField{ editable false value "Hello,World" } visible true } 実行例: これはさきほどのLabelをTextFieldに置き換えただけですね。ちなみに上記の例でのテキストフィールドはユーザが編集を加えることができません。 top マルチコンポーネントの利用 電卓にはボタンが必要です、そのためにマルチコンポーネントを追加していきましょう。一般的にGUIの実装では、レイアウトマネージャーを用いてGUIの実装を行います。ここでは単純な例として、シンプルなレイアウトであるFlowLayoutを取り上げます。 JavaFXにはレイアウトに関する便利なクラスが用意されています。例えばFlowLayoutの場合、FlowPanelsというクラスが用意されています。このようにJavaFXではレイアウトに関するクラスは「xxxPanel」という名前規則を持っています。 import javafx.ui.*; Frame{ title "はじめてのJavaFX" width 200 height 100 content FlowPanel{ --*1 content [ TextField { editable false value "Hello,World" width 100 }, Button{ text "a" }, Button{ text "b" }, Button{ text "Clear" } --*2 ] } --*1 visible true } 実行例: ここでは複数のコンポーネントを配列を用いて表現しています。配列は、Java同様「[」と「]」で表され、配列の要素は,(カンマ)で区切ることで増やすことができます。また最後の要素にカンマを書くこともできます(*2のところにカンマを書くことができる)。 このサンプルではFlowPanelのcontentに複数のコンポーネントを配置していますが、Frameのcontentにも複数のコンポーネントを配列を用いて表現することができます。しかし、同じ方法ではうまくいきません。まずは*1のところをコメントアウトしてみます。単純にこれでFrameのcontentに複数のコンポーネントを配置したことになりました。これを実行してみましょう。 そうすると想像した結果とは異なったものが出てきたはずです。これはすべてのコンポーネントがFrameのBorderLayout.CENTERに従って重なりあってしまうからです。 top クリック時のイベント処理 ボタンをクリックしたらなんらかの動作が起こるようにしたいものです。 これを実現するにはボタンにActionListenersのようなものを加える必要があります。 これから先はボタンの動作などの設定なので、GUIの変化がありません。つまり実行例を載せれません。ちょっと味気ないですが我慢して下さいね D。 また期待した動きをしているかどうかは、System.out.printlnでコンソールに出力される結果を見るか、テキストフィールドの値の変化で確かめてください。 import javafx.ui.*; import java.lang.System; --*1 var win = Frame{ title "はじめてのJavaFX" width 200 height 100 content FlowPanel{ content [ TextField { editable false value "Hello,World" width 100 }, Button{ text "a" action operation(){ System.out.println(" a clicked"); } }, Button{ text "b" action operation(){ System.out.println(" b clicked"); } }, Button{ text "Clear" action operation(){ System.out.println(" c clicked"); } } ] } visible true }; ボタンをクリックしたときのイベント処理は説明する必要がないくらい簡単ですね。クリック時の処理をoperation()の中に書くだけです。しかし、クリックしたときにただコンソールに文字を出力するだけでは電卓も作れません。ここで学んだことだけではまだそれを作ることはできません。 注意することは1つインポートするものが増えたことです(*1)。Java同様にほぼすべてのクラスをインポートする場合はjava.lang.*と表記することもできます。 top Bindingの実装 (Bindingに関するもっと詳しい情報はここを見てください) 日本語訳は現在製作中 JavaFXでは、開発者が自由に新しいクラスを定義したり変数を定義したりすることができます。さきほどの例でも"var win = Frame{..."と変数を使っていました。このことは柔軟なコーディングの助けとなるだけではなく、GUIの実装において、デザインと処理を分離しやすくなります。 Bindingとは自分で定義したデータモデルを自身で利用するための手続きです。これを利用することで変数のいくつかを他の要素に依存させることもできます。例えば、テキストフィールドの値を他の値に依存させることができるのです。ボタンをクリックするとテキストフィールドの値が変化するといった動作もこれを利用します。 import javafx.ui.*; import java.lang.System; class TextValue{ attribute value String; operation clear(); --*1 } operation TextValue.clear(){ --*1 value = ""; } var model = TextValue{ --*2 value "Hello,Model" }; var win = Frame{ title "はじめてのJavaFX" width 200 height 100 content FlowPanel{ content [ TextField { editable false value bind model.value --*3 width 100 }, Button{ text "a" action operation(){ model.value = model.value.concat("a"); --*4 } }, Button{ text "b" action operation(){ model.value = model.value.concat("b"); --*4 } }, Button{ text "Clear" action operation(){ model.clear(); --*5 } } ] } visible true }; このプログラムには3つの新しい要素が加わっています。 それは、クラスの宣言、メソッドの宣言と変数の宣言です。クラスの宣言ではオブジェクト(attributes)とメソッド(operations)を定義しています。 まず妙に感じるのは*1の部分でしょう。メソッドの宣言部分ではそのメソッドがなんであるかを定義していないからです。そのメソッドがなんであるか、具体的に宣言しているのは「operation TextValue.clear(){...」のところです。 変数の宣言(*2を参照)では新しくTextValueのインスタンスを作り、変数valueの値を"Hello,Model"としています。 テキストフィールドのvalueの値は(*3を参照)前の例とは少し異なっています。テキストフィールドの値を宣言するとき初期値に特定の値を入れてしまいがちですが、model.valueの値を参照したほうがより良いと言えます(直接"Hello,Model"とするのではなく、"Hello,Model"と書かれた値を参照したほうが良い)。 このことは"bind"を使っていることと深く関係しています。ここでbindを用いると、model.valueの値が変化したとき、すぐにその変化をテキストフィールドに反映させることができます。また、Bindingは双方向であることに注意しましょう。もしテキストフィールドが編集可能であったとき、テキストフィールドの値の変化をmodel.valueへ反映させることもできます。 *4のところではaボタンとbボタンを定義し、これらボタンをクリックするとmodel.valueの後ろへ1文字追加( a もしくは b )する処理になっています。ここで注意することは文字列の連結です。Javaでは文字列の連結に「+」を使いますが、JavaFXではそれが使えません。くわしくはこちらを参照して下さい。 最後にClearボタンについてですが(*5を参照),さきほどのaボタンやbボタンと基本的なことは同じです。model.valueの文字列を消去する動作を加えるのに、直接「model.value = ""」と書くこともできますが、今回はメソッドの働きを確認したいので、「model.clear()」を用いています。 top トリガーの追加 まだこのプログラムでは1つ見逃していることがあります。 テキストフィールドの値はいつでも変化させることができますが、その値の変化を知ることはできません。これを解決するには、bind命令を少し書き換えるだけでは実装することはできません。 そこでトリガーという機能の紹介に移りたいと思います、これはJavaFXの特徴ともいうべき機能です。これにより定義したattributeが変化したときなんらかの動作を加えることができます。ここでは単純なトリガーの例を示しますが、トリガーはもっと奥深い機能であること忘れないで下さい。 import javafx.ui.*; import java.lang.System; class TextValue{ attribute value String; operation clear(); } operation TextValue.clear(){ value = ""; } var model = TextValue{ value "Hello,Model" }; trigger on TextValue.value[oldValue] = newValue{ --*1 System.out.println("old ".concat(oldValue).concat("; new ").concat(newValue)); } var win = Frame{ title "はじめてのJavaFX" width 200 height 100 content FlowPanel{ content [ TextField { editable false value bind model.value width 100 }, Button{ text "a" action operation(){ model.value = model.value.concat("a"); } }, Button{ text "b" action operation(){ model.value = model.value.concat("b"); } }, Button{ text "Clear" action operation(){ model.value = ""; } } ] } visible true }; ここで変更が加えられたのは*1のところだけです。ここでのトリガーの例はまったく無意味な処理であり、この中は簡単に書き換えることができます。 まずはじめのTextValue.valueの部分でトリガーを付加する場所を示しています。次にあるoldValueでは変化する前の古い値を示しています。そして最後にあるnewvValueでは変化した後の新しい値を示しています。oldValueは任意ですので、変化する前の古い値が必要なければこれを省略することもできます。 本文章はここまです。原文にはSwingのコードも掲載されているので、そちらを参照してみるのもいいかもしれません。 top trackback
https://w.atwiki.jp/note4recurrent/pages/29.html
2022/08/24 動的web html:httpサーバー(Apacheなど)がファイル(htmlやimg)を送り返すだけ。今どきのページではJavascriptで埋め込んだコンテンツ(動画など)を同時に送り返すものも多いが。 JAVAの動的web:httpサーバーからアプリケーション・サーバー上で実行されているプログラム(JAVAなど)を呼び出して実行された結果をhtmlで受け取とる。 JAVAの場合、サーブレットとJSPで実装される。 サーブレットはクラスファイル:JAVAのクラスの一種。htmlを出力するメソッドを持っているイメージ。 JSPファイルで中身はhtmlに近い。htmlにjavascriptを埋め込んだようなイメージ。 サーブレット javaプログラムとhtmlの部分以外は、決り文句なのでコピペでOK。 doGet(),doPost() で受け取る doGet はブラウザのアドレスバーから呼び出されたような場合やgetメソッドで呼び出された時に実行されるメソッド。 doPost()は他のサーブレットやJSP、htmlのリンクから呼び出された時に実行される。 htmlを書き出すときは「PrintWriter out = response.getWriter()」 で宣言したインスタンス(この場合はout)のprintlnメソッドにhtml文字列を引数として渡す。このパターンで覚えておけばいい(前に書いたものからコピペすればいい)。 サーブレットの特徴 サーブレットはメソッドだが、「サーバー上で実行」されたときにインスタンス化されているので、どこかでnewすることはない。サーバー上に常駐し、リクエストを待っている状態と考えればよい。 サーブレットはクラスなので、htmlの書き出し部分でもjavaで作った変数をそのまま使える。 サーブレットはJAVAのクラスなので、src配下に置く。 URLパターン:サーブレットを呼び出すためのURLは、基本的にはサーバー/プロジェクト名/サーブレット名と考えれば良い。サーブレット名はサーブレット内の@WebServlet("/ExServlet") に書かれる。 2022/08/29 前先生 JSP JavaServletPage Eclipsの管理上はhtmlと同じフォルダに置く。(授業ではWebContent)サーブレットと異なることに注意。 htmlにJAVAのコードを埋め込むような感じなので、凝ったレイアウトのhtmlファイルを作りやすい。作り込んだhtmlをもらってJAVAを埋め込むといった使い方が主流。 JAVAのifやloopでhtmlの出力を動的に変えることが可能。 サーブレットと同様、htmlとJSPの決り文句はコピペでOK。 コメントの書き方が異なるので注意。間違えると、画面に表示されたりサーバーエラーになる。 if分やfor分のブロックを閉じる閉じのカッコ” %}% ”を忘れやすいので注意。インデントを勝手にやってくれないので見ずらい。 練習問題 通常のJAVAクラスを作って、JSPから呼び出す練習をした。 import する必要がある。それ以外は普通のクラスの呼び出しと一緒。 Form html 部分は通常のhtmlファイルと同様。 submit を post でするとURLに入力した値は表示されない。getだと表示される。 ラジオボタンとチェックボックスの取得方法は次回。 2022/08/31 フォーム StringBuilder sb = new StringBuilder(); sb.append(value); ストリング変数に+で追加するよりメモリ効率が良く速い。Stirngはオブジェクトで+すると新しくオブジェクトを作って値を入れる。 forward は同じプログラム内のサーブレット、JSPしか呼べない Redirect は制限がない。ネットでつながっているところならどこでも呼べる。 下の行はコメントアウトすること //response.getWriter().append("Served at ").append(request.getContextPath()); knowledge.length 配列の個数を調べるときは()がいらない。普通はhensu.length() 2022/09/07 10章 練習課題:7章の例題をコピペすればOK。来週の修了テストもほとんど同じなので、回答をもらって名前とLogicを触ればいい(はず)。 model DataType データをやり取りするためのjavabeans(クラス):input,input2,input3とそれぞれのgetter,setterを持つだけ。 Logic 入力された文字列をつないでDataTypeのinput3にsetするだけのクラス(Control.javaの中で呼び出される:引数はDataType) servlet Control.servlet postを受けてDataTypeをnewし、Logicで文字列をつないでリクエストスコープにDataTypeを保存して、 result.jspをforward WebContent index.jsp 入力フォーム:postでControlに文字列を2つ投げるだけ Web-INF(フォルダ)jsp(フォルダ) output.jsp Control.servlet からforward で呼び出される。リクエストスコープに入っている DataTypeを受け取って表示するだけ。 2022/09/08 import java.sql.*; mySQLの場合 public static void m01() throws Exception { System.out.println( "===== m01() Mysql Sys に接続" ); Class.forName("com.mysql.cj.jdbc.Driver"); String dburl = "jdbc mysql //localhost 3306/sys?characterEncoding=UTF-8 serverTimezone=Asia/Tokyo"; String sql = "SELECT * FROM version"; ----テーブル名 Connection conn = DriverManager.getConnection(dburl, "root", "root");---MySQLのログイン情報 Statement statement = conn.createStatement(); //statement.executeUpdate(sql); ---select 以外 ResultSet rs = statement.executeQuery(sql);---select の場合 //結果の表示 while( rs.next() ) { String sysVer = rs.getString("sys_version"); String mysqlVer = rs.getString("mysql_version"); System.out.println( sysVer + ", " + mysqlVer ); } //開いた順番と逆に閉じる事 rs.close(); statement.close(); conn.close(); } MySQL につなぐための準備 connector/j をダウンロード https //dev.mysql.com/downloads/connector/j/8.0.html https //dev.mysql.com/downloads/file/?id=513221 "C \pleiades\tomcat\9\lib\mysql-connector-java-8.0.30.jar" ビルドパスの構成が必要になるので注意。(外部JARを追加する) ビルドパス>ビルドパスの構成(ダイヤログ)>ライブラリータブ選択>モジュールパスを選択>外部JARの追加ボタン>ファイルダイヤログでダウンロードしたJARを選択>適用して閉じる 動的webプロジェクト作成手順 スッキリわかるサーブレット&JSP入門第2版に合わせるための設定 java11,tomcat9 を使うこと ファイルメニュー「新規」:動的webプロジェクト プロジェクト名入力 ターゲット・ランタイム確認: 構成ボタンを押す javaのバージョンが一致しているか確認(今は11)。必要があれば修正 次へボタン 表示されているフォルダを選んで「除去」ボタンを押し消す 「フォルダーの追加」ボタンを押し、 「src」 を作成:「次へ」ボタン コンテンツ・ディレクトリーを「WebContent」に変更し完了 (出来上がったプロジェクトをパッケージ・エクスプローラーで開く) srcフォルダを右クリックし「新規」フォルダー:model srcフォルダを右クリックし「新規」フォルダー:servlet WebContentの中のWEB-INFフォルダを右クリックし「新規」フォルダー:jsp 運用 javaのクラスファイルはmodelフォルダに入れる servlet はservlet フォルダに入れる jspファイルはWebContent/ENF-WEB/jsp に入れる。ここに置いたjspファイルはservletから(redirect,forward)で呼ばないと開かない。 外部からアクセスできるjspは WebContent 直下に入れる スコープ:共有みたいなところ スコープにはインスタンス(クラスからnewしたもの)しか置けない。 intやdoubleは置けないが String はおける(Stringはそれ自体がオブジェクトだから)。 添付ファイル:macのファイルなのでwindowsで関係ないファイルが見えることがあるかもしれません。削除しても放置しても構いません。 Chap99.zip 基本 Chap99 -remake.zip フッターを動的インクルードで入れたもの JAVApdf Chap99の説明 java2.pdf 入力チェックの説明 2022/09/14 正規表現 数値でマイナスと小数点を受け付ける:"^[+-]?([1-9]\\d*|0)(\\.\\d+)?$"