約 2,878,829 件
https://w.atwiki.jp/chaka-poko/pages/21.html
JavaScript 画像を縮小して表示(javaScript) EnterKeyの制御 その1 [Counter] Total: -
https://w.atwiki.jp/mdk_0711/pages/16.html
FAQ new Boolean ってイケてないの? 内部で new させることには意味が無いので、valueOf() を使用すること。 C/C++みたいに参照渡し出来ないの? プリミティブ型では出来ません。必ず参照型を使うこと。 VC++のmid()メソッドみたく、文字列の一部を取り出したい substring()メソッド使う。 文字列結合したいんだけど… StringBufferクラスにappendしてから文字列化(toString())する。 String型を + 演算子で連結すると、内部で new しまくるので、使っては駄目。 三項演算子使える? Yes 上手く使えば、switch 文とかの替わりになる。 文字列比較に == しても上手くいかない Java は内部的にはポインタで管理しているので、文字列比較しようとしても、アドレス比較になってしまうらしい。なので、equals()メソッドで比較すること。
https://w.atwiki.jp/javamock/pages/59.html
2次元配列 配列は2次元、3次元、4次元・・・と多次元配列を使用できます。 ここでは2次元配列の説明をします。 2次元配列は以下のように宣言します。 型名[][] 配列変数名; そして値を格納する領域を確保するためにnewを使って以下のように領域確保します。 配列変数名 = new 型名[要素数][要素数]; また、要素への値の代入や参照を行うには以下のようにします。 配列変数[インデックス][インデックス] 2次元配列 使用例 1 TwoDimensionalArraySample1.java class TwoDimensionalArraySample1 { public static void main([[String]][] args) { // 2次元配列の宣言 [[int]][][] twoDimentionalArray = new int[3][3]; [[for]] (int i = 0; i twoDimentionalArray.length; i++) { for (int j = 0; j twoDimentionalArray[i].length; j++) { twoDimentionalArray[i][j] = i*j; } } for (int i = 0; i twoDimentionalArray.length; i++) { for (int j = 0; j twoDimentionalArray[i].length; j++) { System.out.println("twoDimentionalArray[" + i + "][" + j + "] " + twoDimentionalArray[i][j]); } } } } 実行結果 C \java javac TwoDimensionalArraySample1.java C \java java TwoDimensionalArraySample1 twoDimentionalArray[0][0] 0 twoDimentionalArray[0][1] 0 twoDimentionalArray[0][2] 0 twoDimentionalArray[1][0] 0 twoDimentionalArray[1][1] 1 twoDimentionalArray[1][2] 2 twoDimentionalArray[2][0] 0 twoDimentionalArray[2][1] 2 twoDimentionalArray[2][2] 4 以上のように2次元以上の配列の場合でも「length」は使用できます。 以下の箇所のように使用します。 for (int i = 0; i twoDimentionalArray.length; i++) { for (int j = 0; j twoDimentionalArray[i].length; j++) { twoDimentionalArray[i][j] = i*j; } } 2次元配列 使用例 2 以下のようにして2次元配列を初期化宣言することができます int[][] twoDimensionArray = {{0, 1, 2,}, {3, 4, 5,}, {6, 7, 8,}}; TwoDimensionArraySample2.java class TwoDimensionArraySample2 { public static void main(String[] args) { //2次元配列の宣言 int[][] twoDimensionArray = {{0, 1, 2,}, {3, 4, 5,}, {6, 7, 8,}}; for (int i = 0; i twoDimensionArray.length; i++) { for (int j = 0; j twoDimensionArray[i].length; j++) { System.out.println("twoDimensionArray[" + i + "][" + j + "] " + twoDimensionArray[i][j]); } } } } 実行結果 C \java javac TwoDimensionalArraySample2.java C \java java TwoDimensionArraySample2 twoDimensionArray[0][0] 0 twoDimensionArray[0][1] 1 twoDimensionArray[0][2] 2 twoDimensionArray[1][0] 3 twoDimensionArray[1][1] 4 twoDimensionArray[1][2] 5 twoDimensionArray[2][0] 6 twoDimensionArray[2][1] 7 twoDimensionArray[2][2] 8
https://w.atwiki.jp/aru_notebook/pages/16.html
JavaScript例文辞典 http //www.openspc2.org/reibun/javascript/
https://w.atwiki.jp/projecthikky/pages/37.html
Java HTMLパーサ
https://w.atwiki.jp/kodan/pages/110.html
ファイルロック Lock ファイルを作成、削除することによって、ロックを管理する ①ファイルを操作する前に、createNewFile()でロックファイルを作成する。 この時 ・新規に作成できた=true ・すでにファイルが存在している場合=false か返ってくる。 ②ファイル操作を行う ③ファイル操作が終了したら、finally 内で delete()を行う。 問題点:ロックファイル作成後で、削除するまでの間に、プログラムが落ちた場合。 ロックファイルを削除する動作が働く前に落ちるとファイルロックが解除されないままになる。 File lockFile = new File("pid.lock"); lockFile.deleteOnExit(); while (lockFile.createNewFile()) { try { // ロックを取得している場合の処理 ... } finally { lockFile.delete(); } } else { throw new RuntimeException("ロックを取得できませんでした."); } FileLock オブジェクトを使用し、ロックを管理する ①ロック対象のファイルの FileChannel を取得し、.tryLock()でロックをかける。 この時 ・ロックをかけられる場合は、値 ・ロックをかけられない場合は、null が返ってくる。 ※ tryLock の JavaDoc オーバーラップしたロックが別のプログラムによって保持されていたためロックに失敗した場合、 null が返されます。その他の原因でロックに失敗した場合は、適切な例外がスローされます。 ② tryLock() 結果をもとに自分がロックを保有した場合、ファイル操作を行う。 ③ファイル操作が終了したら、finally内でFileLock.release()を行う。 try { File lockFile = new File("pid.lock"); lockFile.deleteOnExit(); fs = new FileInputStream(lockFile); FileChannel fc = fs.getChannel(); FileLock lock = fc.tryLock(); if (lock == null) { new RuntimeException("ロック中"); } try { // ロックを獲得している場合の処理 ... } finally { // ロックの開放 lock.release(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { fs.close(); } catch (IOException e) { e.printStackTrace(); } } 追加情報 File.deleteOnExit() 仮想マシンが終了したときに該当ファイルが削除される。 FileChannel.tryLock() (戻りの型 = FileLock) このチャネルのファイル上で排他ロックを獲得しようとする。 FileLock.release() このロックを解除します。 参考ページ、各JavaDoc
https://w.atwiki.jp/note4recurrent/pages/22.html
尾崎先生 今日の説明資料は共有フォルダにあります。 s1共有\ozaki\Web基礎.pdf 6/21 HTTPの仕組み PC(http request URL) - サーバー(Apache) サーバー(http response) - PC ブラウザはURLを発行し、帰ってきたhtmlを画像に表示する役割。 静的ウェブページ お仕着せの完成品を買ってくるだけ 動的ウェブページ サーバーで情報と付け加えて返す:「JSPとサーブレット」 オーダーした完成品が届く点では静的コンテンツと一緒 Javascriptによる動的ページ:ブラウザで実行されるところがJSPとの違い 素材を返してもらって、最終的にはブラウザで加工して完成させる。 受け取ったコンテンツをブラウザ上で自動的に更新することができる(動く時計など) VSC起動 ファイルメニューでルートフォルダ選択(事前に作っておく) index.htmlを新規作成 最初の行にhtmlと入れるとショートカットが出るのでhtml 5を選ぶ。 決まり切ったコードが自動的に入れられる。(別に自分で叩いても、コピペしても無問題) lang = "ja" にしておくこと:この講座では日本語のページを作るから。 VSCの機能拡張 open in default browserをインストール javascriptの場所 /body の前に置くのが多い script src="script.js" /script は別のファイルを作るため script" 直接スクリプトを書くため /script 変数の作り方 var 使わないほうが良い(過去はこれしかなかった) const 再代入不可 let 再代入可能 Javascript は行末に;はあってもなくてもかまわない。あってもエラーにはならない。 ESLintという文法チェッカーではつけることを推奨:ほかの言語も書くときに忘れないようにつけたほうがいいかも。 変数の宣言 静的型付(C JAVA COBOL VBA)メモリが少なかった時代に開発されたもの。メモリを節約させるため。 動的型付(PHP Javascript Python)メモリが豊富に使えるようになってから作られた言語に多い let lang = "ジャバスクリプト" lang = "Java" lang = 100 //許される Javascript で使える変数の型 Number:数値 整数も少数も大きな数字もこれだけ NaN(Not a Number 非数字) String:文字列全て Boolean Null Undefined type ofで変数に入っているデータの型を調べられる a=4 console.log(typeof a) *num console.log(typeof "a") String let lang = "ジャバスクリプト" lang = "Java" lang = 100 //許される console.log(lang) //Javascript データ型 // Number console.log(0/0) const a = 10 const b = 4 console.log(a+b) console.log(a-b) console.log(a*b) console.log(a/b) console.log(a % b) //剰余算 console.log(a ** b) //べき乗 console.log(typeof num) //型を調べる // String "" も const food1 = "チョコレート" const food2 = チョコレート console.log(food1) const food3 = "パフェ" console.log(food1+food3) // + で連結 //+で連結された結果は文字列となる const drink1 = "珈琲" const unit = "杯" console.log(drink1 + 3 + unit) console.log(typeof (drink1 + 3 + unit)) //テンプレートリテラル(ES6) //例 「珈琲を2杯ください」 console.log(drink1 + "を" + 2 + unit + "ください") console.log(`${drink1}を2${unit}ください`) //"15"を15に変換(VBAのVALUE) const strNum = "15" console.log(typeof parseInt(strNum))//parseIntで文字列が数字になる //数字として認識できるかどうかはシステムに依存。全角の数字でもいけるかどうか保証できない。 // Undefined(未定義) // 初期化されていない変数 // Boolean(真偽値) // true or false だけを持てる let flg = true console.log(flg) //否定演算子 ! console.log(!flg) //比較演算子 const con1 = 100 const con2 = 50 //等値演算子 console.log(con1 == con2*2)//左辺と右辺が等しい値か console.log(con1 != con2*2)//左辺と右辺は等しい値ではないか //同値演算子 const con3 = "50" console.log(con2 == con3) //左辺と右辺が等しい値か console.log(con2 === con3)//左辺と右辺が同じ値か:型まで一致しているか //配列 const drinks = ["珈琲","紅茶","ジュース","緑茶"] console.log(drinks[0]) console.log(drinks[2]) drinks[2] = "apple" //const で宣言したものでも更新できる console.log(drinks[2]) !DOCTYPE html html lang="ja" head meta charset="UTF-8" meta http-equiv="X-UA-Compatible" content="IE=edge" meta name="viewport" content="width=device-width, initial-scale=1.0" title Event /title /head body h1 id="target" アクセス前 /h1 button id="clk" click /button h2 id="target2" ABC /h2 p 下のボタンをクリックすると上の文字が変わります /p button id="clk2" change! /button script //読み込み完了時に動作 window.addEventListener("DOMContentLoaded",function(){ const newH1 = "アクセス後" const idTarget = document.querySelector("#target") //console.log(idTarget) idTarget.innerHTML = newH1 //ボタンを捕まえる const clickButton = document.querySelector("#clk") //console.log(clickButton) let flag = true clickButton.addEventListener("click",function(){ if (flag){ idTarget.innerHTML = "Clickされたよ" } else{ idTarget.innerHTML = newH1 } flag = !flag }) //ボタン2を捕まえる const clickButton2 = document.querySelector("#clk2") const idTarget2 = document.querySelector("#target2") let flag2 = true clickButton2.addEventListener("click",function(){ if (flag2){ idTarget2.innerHTML = "CDE" } else{ idTarget2.innerHTML = "ABC" } flag2 = !flag2 }) }) /script /body /html ボタン2を捕まえる以下のみ色々試した。 //ボタン2を捕まえる const clickButton2 = document.querySelector("#clk2") const idTarget2 = document.querySelector("#target2") let flag2 = 0 clickButton2.addEventListener("click",function(){ if(flag2 == 0){ idTarget2.innerHTML = "DEF" } else if(flag2 == 1){ idTarget2.innerHTML = "GHI" } else { idTarget2.innerHTML = "ABC" } flag2 += 1 if(flag2 2){ flag2 = 0 } if (idTarget2.innerHTML == "DEF"){ idTarget2.innerHTML = "文字列によって反応を変えることもできる" } }) 後、乱数発生の関数を加えれば簡易じゃんけんゲームくらいはできそう。 配列を使って順番にテキストを回す let i = 0; let dispText = ["DEF","GHI","ABC"] //この行までは起動時に一回だけ実行される。 clickButton2.addEventListener("click",function(){ //button2 が押される度に下のブロックが実行される。変数の値は残っている。 idTarget2.innerHTML = dispText[i]; i += 1; if (i 2){ i = 0; } }) 乱数と切り捨て関数を使ってランダムに表示 連続しないように確認を追加 const clickButton2 = document.querySelector("#clk2") const idTarget2 = document.querySelector("#target2") let ransuu = 0; let check = 0; let dispText = ["Masth.random と Math.trunc","乱数と整数切り捨て関数","コードスッキリ","配列の使い方の練習にもなった"] clickButton2.addEventListener("click",function(){ if (ransuu == check){ ransuu = Math.trunc(Math.random()*10/3); //乱数は0〜1の少数なので10倍して3で除した結果の少数以下を切り捨てている } else { ransuu = check; } idTarget2.innerHTML = dispText[ransuu]; }) 関数を使ってみました コードがスッキリして読みやすい(はずw) const clickButton2 = document.querySelector("#clk2") const idTarget2 = document.querySelector("#target2") let ransuu = 0; let dispText = ["Masth.random と Math.trunc","乱数と整数切り捨て関数","コードスッキリ","配列の使い方の練習にもなった"] clickButton2.addEventListener("click",function(){ ransuu = getRansuu(ransuu); idTarget2.innerHTML = dispText[ransuu]; }) //今持ってる数字ransuuを受けて異なる数字を返す関数 karisuu は関数内でしか使わないローカル変数 function getRansuu(num) { let karisuu = Math.trunc(Math.random()*10/3); //乱数は0〜1の少数なので10倍して3で除した結果の少数以下を切り捨てている while (num == karisuu) { //メインの数字が持っているものと同じ数字が出ている間は何回も数字を取得する karisuu = Math.trunc(Math.random()*10/3); } return karisuu; }; 繰り返し:ループ for forEach script window.addEventListener("DOMContentLoaded",function(){ //Get UL const ulCourses = document.querySelector("#courses") const subjects =[ "webクリエイター", "web プログラマー", "動画編集", ] for (let index = 0 ; index subjects.length ; index++){ //meke li tag li /l const newLi = document.createElement("li") // li にテキストを入れる li web creater /li newLi.innerText = subjects[index] // add ulCourses.appendChild(newLi) } subjects.forEach(function(subject){ const newLi = document.createElement("li") newLi.innerText = subject ulCourses.appendChild(newLi) }) }) /script html !DOCTYPE html html lang="ja" head meta charset="UTF-8" meta name="viewport" content="width=device-width, initial-scale=1.0" title Memoアプリ /title link href="https //cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous" /head body div class="container" !-- INPUT -- div class="alert alert-secondary mt-3" div class="row" div class="col-3" input type="text" class="form-control" name="" id="name" placeholder="名前" /div div class="col-7" input type="text" class="form-control" name="" id="comment" placeholder="コメント" /div div class="col-2" button class="btn btn-outline-success" id="btn" 追加 /button /div /div /div !-- DATA TABLE -- table class="table table-secondary table-striped table-bordered" id="tbl" tr th 名前 /th th コメント /th th 日付 /th /tr tr td 森下 /td td ........ /td td 2022/06/27 /td /tr tr td 森下 /td td ........ /td td 2022/06/27 /td /tr /table /div script src="memoapp.js" /script /body /html memoapp.js //windwoが読みこまれるまで待機 window.addEventListener("DOMContentLoaded",function(){ const tbl = this.document.querySelector("#tbl") //btnが押されたら const btn = document.querySelector("#btn") btn.addEventListener("click",function(){ //名前を取り込む const name = document.querySelector("#name") //コメントを読みこむ const comment = document.querySelector("#comment") //名前とコメントの両方に入力があった場合 //name.length に文字数が入ってくる //if (name.value.length 0 comment.value.length 0){ も同じ意味 if (name.value.length comment.value.length ){ //入力された日時の取得 月は0オリジンなので注意が必要 const current = new Date() const currentStr= `${current.getFullYear()}年${current.getMonth()+1}月${current.getDate()}日` //console.log(currentStr) //tableの更新 //tr行設定 const trTag = document.createElement("tr") //td 1行あたり3カラム(3列)なので、tdを3回繰り返す。 const tdNameTag = document.createElement("td") //一つ目のtd tdNameTag.innerText = name.value //tdの中身を設定 name.value には上で入力された名前が入っている trTag.appendChild(tdNameTag) //tdタグを加える1回目 const tdCommentTag = document.createElement("td") tdCommentTag.innerText = comment.value trTag.appendChild(tdCommentTag) //tdタグを加える2回目 const tdDateTag = document.createElement("td") tdDateTag.innerText = currentStr trTag.appendChild(tdDateTag) //tdタグを加える一3回目 //tableにtr行を挿入 tbl.appendChild(trTag) //三つのtdの入ったtrを一行追加 //入力フィールドをクリアして終わり name.value ="" comment.value ="" } }) }) 2022/7/05 !doctype html html lang="ja" head meta charset="utf-8" meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" link href="https //cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous" title Javascript game /title /head body div class="container" div class="alert alert-info" h1 class="h4" 足りない文字はどれ? /h1 button class="btn btn-info" id="makeQuestion" 出題 /button span id= timediff class="px-3" /span /div div class="row" id="quizDiv" /div //数字を並べる場所 div class="form-row" div class="col-2 offset-9" //col-2 offset-9 はbootstrap で使うためのセレクタ 以下同様 答え input type="text" name="" id="answerBox" class="form-control" //回答記入用フィールドの設定 /div div class="col-1" button class="btn btn-danger" id="answerbtn" 回答 /button //回答ボタンを配置 /div /div /div script window.addEventListener("DOMContentLoaded",function(){ // console.log("load"); // 問題を書き込む場所 const quizDiv = document.querySelector("#quizDiv"); //問題文字列を並べる場所を使う //quizDiv に quizDiv で設定した場所(div id ="quizDiv" で指定されたところ)を入れる //console.log(quizDiv); // 解答入力欄 const answerBox = document.querySelector("#answerBox"); //入力欄を今後 answerBox として使う //console.log(answerBox); let condition = false; //出題が押されているかどうかの確認に使う let answer = ""; //答えを保管するための変数 const makeQuestion = document.querySelector("#makeQuestion"); //出題ボタンを使うという宣言 //出題ボタンをクリックされたときの動作 makeQuestion.addEventListener("click",function(){ condition = true; //出題済にする const questions = ["A","B","C","D","E"]; //問題の配列を設定 // console.log("btn clicked"); //quesiton から1つ取り出す answer = questions.splice(Math.floor(Math.random()*questions.length),1); //randomを使って一文字を抜き取る Mathfloor は切り捨て、Math.randomは乱数発生 //Math.random()にquestions.lengthを掛けることで最大いくつまでの乱数を発生させるかを操作する //Math.random()は0〜1までの少数なので4を掛ければ0〜3までの少数になる。Mathfloorで切り捨てて整数にしている。 //Math.random()にquestions.lengthを掛けているのはquestionsの数が変わってもプログラムを書き直す必要がないようにするため。(他のプログラムにコピペして再利用するときにも便利) // console.log(questions.splice(Math.floor(Math.random()*questions.length),1)); //console.log(Math.floor(Math.random()*questions.length)); //console.log(answer); //console.log(questions); //前回の結果をクリア while(quizDiv.firstChild){ //quizDiv.firstChild がある間は回り続ける quizDiv.removeChild(quizDiv.firstChild); //quizDivにある子要素(この場合div)を上から一つ取り除く } //文字列を並べかえる、 const questions2 = []; //並べ替えのための配列を準備 while(questions.length){ //questions の配列分ループする questions2.push(questions.splice(Math.floor(Math.random()*questions.length),1)[0]); //splice で切り取るための開始位置をランダムで決めている。 //random の乗数をquestions.lengthとしているのはquestionsの配列がループを回る度に変わるから。 //quetions.splice(開始位置,抜き取る数) //questions2.push(配列に付け加える対象) //一番右に[0]とあるのは、splice で抜き取ったものが配列だから。ここでは1個しかないのでゼロ番目と決まっている。 } questions.push(...questions2); // 配列の中身を他の配列にコピーするチート技。新しいJavascriptでしかできない。 //これを使わない場合はループを使って中身を一つ一つコピーするしかない。 //文字列を並べる divタグを追加 questions.forEach (function(q){ //questions の数だけ以下のブロックを実行。qにはquestions配列から取り出した文字一つが入っている。 //console.log(q); const newDiv = document.createElement("div"); //div タグを生成 if (Math.floor(Math.random()*2)===0){ //ランダムで0か1かを発生し、0なら以下を実行 q = q.toLowerCase(); // qを小文字に変換(else を使わないのは元々大文字が入っているから } newDiv.innerText = q; //q をdiv の innerText に入れる(htmlで表示される) newDiv.classList.add("col-1","border","text-center","me-1"); //div に付加するclassを一括設定 //col-1 は CSS(この場合はbootstrapやけど)で横に並べる設定。 //border は枠線をつける、text-center は中央揃え、me-1 は右にマージン1 quizDiv.append(newDiv); // newDiv を quizDiv に追加 //ループ一回転で一つの文字 div /div を追加する }) }); //解答ボタンをクリックされたときの動作 const answerbtn = document.querySelector("#answerbtn"); answerbtn.addEventListener("click",function(){// console.log("ansbtn clicked"); // if (condition == false){ // console.log("出題されていない"); // return false; // } const inputAnswer = answerBox.value.toUpperCase(); //inputAnswer に入力された文字を大文字にして代入 if(condition inputAnswer.length===1){ //condition(出題ボタンが押されていて)inputAnswerが一文字(空白だったり2文字以上だったりしないときに以下のブロックを実行 if (answer[0] === inputAnswer){ //出題時にとっておいた answer と inputAnswer と突合 alert("正解です"); }else { alert("不正解です"); answerBox.value =""; //不正解の場合は入力欄をクリアして次の入力を待つ。 } } }); }); /script /body /html
https://w.atwiki.jp/guru/pages/53.html
Java Tipsです。
https://w.atwiki.jp/msys413/pages/13.html
Javascript Javascriptのmemo的なページっす IE6で透過PNGを正常に表示させる。
https://w.atwiki.jp/ce00582/pages/3252.html
import java.awt.*; import java.awt.event.*; class game0124 extends Frame implements Runnable ,MouseMotionListener{ int px,py; int mode; public static void main(String [] args) { Frame f=new game0124(); f.setTitle("game0124"); f.setSize(700,700); f.setBackground(Color.yellow); f.setVisible(true); } game0124(){ addMouseMotionListener(this); Thread th=new Thread(this); th.start(); addWindowListener(new stopwin()); } class stopwin extends WindowAdapter{ public void windowClosing(WindowEvent we){System.exit(0);} } public void run(){ int t; mode=1; px=1; py=1; t=0; while(t 500){ if(mode==1)px=px+1; if(mode==4)px=px-1; if(mode==2)py=py+1; if(mode==3)py=py-1; repaint(); try{ Thread.sleep(300); }catch(InterruptedException e){} t=t+1; } repaint(); } public void mouseDragged(MouseEvent e) { } public void mouseMoved(MouseEvent e) { int x,y; int h; y=e.getY() ; x=e.getX(); mode=5; h=0; if(x 175)h=h+1; if(y 500)h=h+1; if(h==2)mode=1; h=0; if(x 175)h=h+1; if(x 350)h=h+1; if(y 500)h=h+1; if(h==3)mode=2; h=0; if(x 350)h=h+1; if(x 525)h=h+1; if(y 500)h=h+1; if(h==3)mode=3; h=0; if(x 525)h=h+1; if(y 500)h=h+1; if(h==2)mode=4; } public void paint(Graphics g){ g.setColor(Color.red); g.fillRect(0,500,175,200); g.setColor(Color.green); g.fillRect(175,500,175,200); g.setColor(Color.red); g.fillRect(350,500,175,200); g.setColor(Color.green); g.fillRect(525,500,175,200); g.setColor(Color.black); g.fillRect(100+50*px,100+50*py,50,50); g.drawString("左",100,600); g.drawString("下",275,600); g.drawString("上",450,600); g.drawString("右",625,600); } }