約 1,438,076 件
https://w.atwiki.jp/javamock/pages/31.html
Calendar Javaにおいて java.util.Calendarクラスは日付・時刻を扱うクラスです。 Calendarは以下のように抽象クラスとして宣言されています。 public abstract class Calendar extends Object implements Serializable, Cloneable Calendarのコンストラクタは protected Calendar() protected Calendar(TimeZone zone, Locale aLocale) とprotectedで宣言されています。 インスタンスを得るために通常はpublicのコンストラクタを使いますが、 Calendarのコンストラクタはprotectedで宣言されているので、 protectedで宣言されていないgetInstance()などを使いオブジェクトを作る必要があります。 getInstanceはstaticメソッドのため、Calendar.getInstance()のように使用します。 このようなインスタンスを生成するためのメソッドをファクトリメソッドと呼ぶそうです。 Calendar 使用例 1 CalendarSample1.java import java.util.Calendar; class CalendarSample1 { public static void main([[String]][] args) { // デフォルトのタイムゾーンおよびロケールを使用してカレンダを取得します Calendar calendarObject = Calendar.getInstance(); System.out.println(calendarObject); } } 実行結果 C \java javac CalendarSample1.java C \java java CalendarSample1 java.util.GregorianCalendar[time=1236166813703,areFieldsSet=true,areAllFieldsSet =true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Tokyo",offset=324000 00,dstSavings=0,useDaylight=false,transitions=10,lastRule=null],firstDayOfWeek=1 ,minimalDaysInFirstWeek=1,ERA=1,YEAR=2009,MONTH=2,WEEK_OF_YEAR=10,WEEK_OF_MONTH= 1,DAY_OF_MONTH=4,DAY_OF_YEAR=63,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=1,AM_PM=1,HOU R=8,HOUR_OF_DAY=20,MINUTE=40,SECOND=13,MILLISECOND=703,ZONE_OFFSET=32400000,DST_ OFFSET=0] 次にCalendarのフィールドを使います。 Calendar 使用例 2 (フィールド) Calendarには以下のstaticフィールドがあります。※他にもあります YEAR getおよびsetのための、年を示すフィールド値です。 MONTH getおよびsetのための、月を示すフィールド値です。 JANUARY(0), FEBRUARY(1)、MARCH(2)、APRIL(3)、MAY(4)、JUNE(5)、JULY(6)、 AUGUST(7)、SEPTEMBER(8)、OCTOBER(9)、NOVEMBER(10)、DECEMBER(11) DATE getおよびsetのためのフィールド値で、月の日を示します。 HOUR_OF_DAY getおよびsetのためのフィールド値で、時刻を示します。 MINUTE getおよびsetのためのフィールド値で、分を示します。 SECOND getおよびsetのためのフィールド値で、秒を示します。 DAY_OF_WEEK getおよびsetのためのフィールド値で、曜日を示します。 SUNDAY(1)、MONDAY(2)、TUESDAY(3)、WEDNESDAY(4)、THURSDAY(5)、FRIDAY(6)、SATURDAY(7) CalendarSample2.java import java.util.Calendar; class CalendarSample2 { public static void main(String[] args) { Calendar calendarObject = Calendar.getInstance(); [[int]] calendarYear = calendarObject.get(Calendar.YEAR); int calendarMonth = calendarObject.get(Calendar.MONTH) + 1; int calendarDay = calendarObject.get(Calendar.DATE); int calendarHour = calendarObject.get(Calendar.HOUR_OF_DAY); int calendarMinute = calendarObject.get(Calendar.MINUTE); int calendarSecond = calendarObject.get(Calendar.SECOND); int calendarWeek = calendarObject.get(Calendar.DAY_OF_WEEK); System.out.println(calendarYear + "/" + calendarMonth + "/" + calendarDay + "/ " + calendarHour + " " + calendarMinute + " " + calendarSecond + " " + getWeek(calendarWeek)); } // Calendar.DAY_OF_WEEKで得られた値を文字列に変換するメソッドです static String getWeek(int week) { String[] stringWeek = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"}; [[return]] stringWeek[week-1]; } } 実行結果 C \java javac CalendarSample2.java C \java java CalendarSample2 2009/3/4/ 21 17 26 WED Calendar 使用例 3 (get setメソッド) Calendarのget、setメソッドには以下のようなものがあるようです。 void set(int year, int month, int date) カレンダフィールド YEAR、MONTH、および DAY_OF_MONTH の値を設定します。 void set(int year, int month, int date, int hourOfDay, int minute) カレンダフィールド YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY、および MINUTE の値を設定します。 void set(int year, int month, int date, int hourOfDay, int minute, int second) フィールド YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE、および SECOND の値を設定します。 int get(int field) 指定されたカレンダフィールドの値を返します。 CalendarSample3.java import java.util.Calendar; class CalendarSample3 { public static void main(String[] args) { Calendar calendarObject = Calendar.getInstance(); calendarObject.set(2009,1,2); System.out.println(calendarObject.get(Calendar.YEAR)); System.out.println(calendarObject.get(Calendar.MONTH)); System.out.println(calendarObject.get(Calendar.DATE)); } } 実行結果 C \java javac CalendarSample3.java C \java java CalendarSample3 2009 1 2 Calendar 使用例 4 (addメソッド) add(int field, int amount)はCalendarのフィールドに対して加算(減算)を行うメソッドです。 fieldにはCalendarのフィールドを指定し、amountには加算する数値を指定します。 CalendarSample4.java import java.util.Calendar; class CalendarSample4 { public static void main(String[] args) { Calendar calendarObject = Calendar.getInstance(); printCalendar(calendarObject); calendarObject.add(Calendar.YEAR, 1); printCalendar(calendarObject); calendarObject.add(Calendar.MONTH, 1); printCalendar(calendarObject); calendarObject.add(Calendar.DATE, 1); printCalendar(calendarObject); } // Caldendarオブジェクトの日付を表示するメソッドです static void printCalendar(Calendar calendarObject) { int calendarYear = calendarObject.get(Calendar.YEAR); int calendarMonth = calendarObject.get(Calendar.MONTH) + 1; int calendarDay = calendarObject.get(Calendar.DATE); int calendarHour = calendarObject.get(Calendar.HOUR_OF_DAY); int calendarMinute = calendarObject.get(Calendar.MINUTE); int calendarSecond = calendarObject.get(Calendar.SECOND); int calendarWeek = calendarObject.get(Calendar.DAY_OF_WEEK); System.out.println(calendarYear + "/" + calendarMonth + "/" + calendarDay + "/ " + calendarHour + " " + calendarMinute + " " + calendarSecond + " " + getWeek(calendarWeek)); } // Calendar.DAY_OF_WEEKで得られた値を文字列に変換するメソッドです static String getWeek(int week) { String[] stringWeek = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"}; return stringWeek[week-1]; } } 実行結果 C \java javac CalendarSample4.java C \java java CalendarSample4 2009/3/4/ 22 12 38 WED 2010/3/4/ 22 12 38 THU 2010/4/4/ 22 12 38 SUN 2010/4/5/ 22 12 38 MON
https://w.atwiki.jp/sevenlives/pages/35.html
JVM 【Java仮想マシン】 読み:じぇいぶいえむ 英語:Java Virtual Machine 別名:Java仮想マシン 意味: JVMとはJavaのプログラムを動かすために必要な土台のようなソフトウェア。 ハードとJavaのバイトコード?の間を取り持つ仕組み。 JavaはJVMによって同じコードをプラットフォームに依存させることなく他のハードにも転用できるメリットがある(WORA)。 通常のプログラムよりワンクッションおくためにJavaのプログラムは遅いといわれたがJVMの進化により現代では問題ないレベルになっている。 バイトコード? KVM? ガーベージ・コレクション ヒープ コンスタント・プール? Javaヒープ? Permヒープ? Cヒープ? スレッド・スタック? ■ スレッドエリア PCレジスタ? JVMスタック? ネイティブ・メソッド・スタック? フレーム(JVM)? JITコンパイラ HotSpot BeanShell? gcj? 2010年10月31日
https://w.atwiki.jp/h264hirasa/pages/20.html
JAVA Advanced Image (JAI) https //jai.dev.java.net/binary-builds.html JAI インストール
https://w.atwiki.jp/ce00582/pages/3250.html
import java.awt.*; import java.awt.event.*; class game0125 extends Frame implements Runnable ,MouseMotionListener{ int px,py; int mode; public static void main(String [] args) { Frame f=new game0125(); f.setTitle("game0125"); f.setSize(700,700); f.setBackground(Color.yellow); f.setVisible(true); } game0125(){ 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==2)px=px-1; repaint(); try{ Thread.sleep(100); }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=3; h=0; if(x 350)h=h+1; if(y 500)h=h+1; if(h==2)mode=1; h=0; if(x 350)h=h+1; if(y 500)h=h+1; if(h==2)mode=2; } public void paint(Graphics g){ g.setColor(Color.red); g.fillRect(0,500,350,200); g.setColor(Color.green); g.fillRect(350,500,350,200); g.setColor(Color.black); g.fillRect(100+50*px,100+50*py,50,50); g.drawString("左",150,600); g.drawString("右",500,600); } }
https://w.atwiki.jp/kimikage/pages/131.html
StartUp.java package test; /* * startup class */ public class StartUp { // mainメソッドがプログラムの起動時に実行される public static void main(String[] args){ // 画面を表示 MainFrame mainFrame = new MainFrame(); mainFrame.setVisible(true); } } MainFrame.java package test; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import javax.swing.JFrame; import javax.swing.JOptionPane; /* * main frame class */ public class MainFrame extends JFrame { private static final long serialVersionUID = 1L; /* * main frame */ public MainFrame() { setDefaultCloseOperation(EXIT_ON_CLOSE); setSize(400, 300); setTitle("てすと"); setLocationRelativeTo(null); List String list = new ArrayList String (); list.add("あさ"); list.add("あい"); list.add("うえ"); // 自作クラスPredicateのListをフィルタするWhereメソッドで条件に合う項目を抽出 List String result = (List String ) Predicate.Where(list, new IPredicate String () { @Override public boolean Calc(String obj) { return obj.startsWith("あ"); } }); // ダイアログにメッセージを表示 // 自作クラスPredicateのListを結合するJoinメソッドで項目を結合 JOptionPane.showConfirmDialog(this, Predicate.Join(",", result), "確認", JOptionPane.OK_OPTION, JOptionPane.QUESTION_MESSAGE); } } IPredicate.java package test; // genericを実装したインターフェース // classの場合も同じように記述可能 public [[interface]] IPredicate T { boolean Calc(T obj); } Predicate.java package test; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public final class Predicate { // genericを実装したstaticメソッド // predicateの条件を満たす項目をtargetから抽出して返却 public static T Collection T Where(Collection T target, IPredicate T predicate) { Collection T retVal = new ArrayList T (); for (T item target) { if (predicate.Calc(item)) { retVal.add(item); } } return retVal; } // target同士の間にseparatorを挟んで結合したものを返却 public static T String Join(String separator, Collection T target) { StringBuilder sb = new StringBuilder(); if (target != null) { Iterator T iterator = target.iterator(); if (iterator.hasNext()) { sb.append(iterator.next().toString()); while (iterator.hasNext()) { sb.append(separator + iterator.next().toString()); } } } return sb.toString(); } }
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/kgitks/pages/15.html
ログイン関連のJavaソースコード。 ログインに3回失敗した場合に行う処理について記述した。 LoginManager package manager; import java.text.DateFormat; import java.text.ParseException; import java.util.Calendar; import java.util.Date; public class LoginManager { private DBAccess_login dba_login; /** * コンストラクタ。同時にDBAccess_loginのオブジェクトを生成する。 */ public LoginManager(){ this.dba_login=new DBAccess_login(); } /** * 3回ログインに失敗した後、再ログイン可能か調べるメソッド * 現在時刻とログイン失敗時刻の差が1時間以内であればfalseを返す * @param misseditme 3回目のログイン失敗時刻 * @return ログイン可否 * @throws ParseException */ public boolean isRelogin(String missedtime) throws ParseException{ boolean result=true; String nowtime=getNowTime(); System.out.println(nowtime); //ログイン失敗日をyyyy/mm/dd形式で取得 String miss_ymd=format_ymd(missedtime); //現在日をyyyy/mm/dd形式で習得 String now_ymd=format_ymd(nowtime); //ログイン失敗時の時刻を秒単位で取得 int miss_hms=format_hms(missedtime); //現在の時刻を秒単位で取得 int now_hms=format_hms(nowtime); //失敗日と現在日の差を取得 int dif=differenceDays(now_ymd,miss_ymd); if(dif==0){//同日の場合、時間で比較 if((now_hms-miss_hms) 3600){ result=false; } }else if(dif==1 miss_hms 82800 now_hms 3600){//1日違い、失敗時刻が23時以降、現在時刻が1時未満の場合 now_hms+=82800; System.out.println(now_hms); System.out.println(miss_hms); if(now_hms miss_hms){ result=false; } } //判別結果を返す return result; } /** * yyyymmdd~形式からyyyy/mm/dd形式に変換するメソッド * @param ymd yyyymmdd形式の年月日(yyyymmddhhmmss形式も可) * @return yyyy/mm/dd形式の年月日 */ public String format_ymd(String ymd){ String format_ymd=ymd.substring(0, 4)+"/" +ymd.substring(4, 6)+"/" +ymd.substring(6, 8); return format_ymd; } /** * yyyymmddhhmmss形式から秒単位形式に変換するメソッド * @param ymdhms * @return 時分秒を秒に揃えた整数 */ public int format_hms(String ymdhms){ int hms=Integer.parseInt(ymdhms.substring(8,10))*3600 +Integer.parseInt(ymdhms.substring(10,12))*60 +Integer.parseInt(ymdhms.substring(12,14)); return hms; } /** * 現在の日時をyyyymmddhhmmss形式で取得するメソッド * @return yyyymmddhhmmss形式で表現された現在日時 */ public String getNowTime(){ Calendar cal1 = Calendar.getInstance(); //(1)オブジェクトの生成 int year = cal1.get(Calendar.YEAR); //(2)現在の年を取得 int month = cal1.get(Calendar.MONTH) + 1; //(3)現在の月を取得 int day = cal1.get(Calendar.DATE); //(4)現在の日を取得 int hour = cal1.get(Calendar.HOUR_OF_DAY); //(5)現在の時を取得 int minute = cal1.get(Calendar.MINUTE); //(6)現在の分を取得 int second = cal1.get(Calendar.SECOND); //(7)現在の秒を取得 String ymd; //yyyymmの形式に変換 if(month 10){ ymd = year+"0"+month; }else{ ymd = year+""+month; } //yyyymmddの形式に変換 if(day 10){ ymd = ymd+"0"+day; }else{ ymd = ymd+""+day; } //yyyymmddhhの形式に変換 if(hour 10){ ymd = ymd+"0"+hour; }else{ ymd = ymd+""+hour; } //yyyymmddhhmmの形式に変換 if(minute 10){ ymd = ymd+"0"+minute; }else{ ymd = ymd+""+minute; } //yyyymmddhhmmssの形式に変換 if(second 10){ ymd = ymd+"0"+second; }else{ ymd = ymd+""+second; } //完成したものを返す return ymd; } //http //sattontanabe.blog86.fc2.com/blog-entry-88.html //から拝借 /** * 2つの日付の差を求めます。 * 日付文字列 strDate1 - strDate2 が何日かを返します。 * * @param strDate1 日付文字列 yyyy/MM/dd * @param strDate2 日付文字列 yyyy/MM/dd * @return 2つの日付の差 * @throws ParseException 日付フォーマットが不正な場合 */ public static int differenceDays(String strDate1,String strDate2) throws ParseException { Date date1 = DateFormat.getDateInstance().parse(strDate1); Date date2 = DateFormat.getDateInstance().parse(strDate2); return differenceDays(date1,date2); } /** * 2つの日付の差を求めます。 * java.util.Date 型の日付 date1 - date2 が何日かを返します。 * * 計算方法は以下となります。 * 1.最初に2つの日付を long 値に変換します。 * ※この long 値は 1970 年 1 月 1 日 00 00 00 GMT からの * 経過ミリ秒数となります。 * 2.次にその差を求めます。 * 3.上記の計算で出た数量を 1 日の時間で割ることで * 日付の差を求めることができます。 * ※1 日 ( 24 時間) は、86,400,000 ミリ秒です。 * * @param date1 日付 java.util.Date * @param date2 日付 java.util.Date * @return 2つの日付の差 */ public static int differenceDays(Date date1,Date date2) { long datetime1 = date1.getTime(); long datetime2 = date2.getTime(); long one_date_time = 1000 * 60 * 60 * 24; long diffDays = (datetime1 - datetime2) / one_date_time; return (int)diffDays; } } LoginController package manager; import java.text.ParseException; public class LoginController { protected void doPost(){ try{ LoginManager lm = new LoginManager(); User user = new User(); //ログイン失敗日時の取得 String missedtime=user.getMissed_time(); //ログイン可能かチェック boolean logincheck = lm.isRelogin(missedtime); if(!logincheck){//ログインできないと判断された場合 //login_error.jspに遷移 System.out.println("ログインできましぇん"); }else{ //menu.jspに遷移 System.out.println("ログインできるよ!やったねタエちゃん!"); } }catch (ParseException e){ } } } User package manager; public class User { //新しいメンバ変数の追加(ログイン失敗時刻) private String missed_time="20130804232251"; //コンストラクタも新しく用意する。 public User(){} //セッターゲッターも新しく用意する。 public String getMissed_time() { return missed_time; } public void setMissed_time(String missed_time) { this.missed_time = missed_time; } }
https://w.atwiki.jp/h264hirasa/pages/25.html
JAIについて JAI API http //java.sun.com/products/java-media/jai/forDevelopers/jai-apidocs/index.html JAIインストール
https://w.atwiki.jp/sitescript/pages/733.html
JAV.RE JAV.RE https //jav.re/ description - Watch full-lenght Japan Adult Video(JAV) HD online for free , Jav HD Online, DownLoad JAV HD Free, Free JAV Uncensored, Free JAV Streaming, Movies HOT JAV Japanese AV Download Uncensored,Censored updated daily スクリプトをインストールversion 0.1 2019.01.03 up たぶん、HLSによる配信です。 スクリプトの94行目あたり、_Gbl.showM3U の値が trueの時、HLS配信の listurl(m3u8)を拾った場合に、メッセージボックスにそれを表示し、Craving Exporerに送るかどうかを尋ねます。 スクリプトの95行目あたり、_Gbl.sendM3U は、_Gbl.showM3U=false(メッセージボックスを表示しない)設定で、HLS配信の listurl(m3u8)を拾った場合に、それをCraving Explrerへ送るかどうか、です。(2019.01.07追記、Craving Explorerへ送っても、最終的に、保存に失敗するかもしれません。下記参照。) Craving Explorer は、version 1.9.14で、HLS配信の動画の保存に対応しています。 ただし、このサイトのHLSは、2019.01.07現在、AES-128エンコードされており、おそらく、Craving Explorerは、そのデコードに対応していないのではないかと思います。(最後の段階で、セグメントファイルの結合に失敗し、完了する)。 HLSのリストURLを用いて、ffmpegなどから保存することができるかもしれません。ffmpeg -i "listurl(m3u8)" -vcodec copy -acodec copy -absf aac_adtstoasc "outfile.mp4"など。 修正情報 version 0.1 2019.01.03 up 補足情報 類似のサイト。 hiporn(口海石並) https //www.hiporn.net/ https //xxx.h1p.pw/ https //xxx.h1p.host/ (xxxは、任意)https //www.hiporn.net/korean 嗨碰視頻、嗨碰(口海石並)、hiporn、ハイポン) ページにダウンロードリンクがあります。 スクリプトをインストールversion 0.2 2019.01.07 up 96行目あたり、_Gbl.show91Porn は、APIから 91PORNのURLを拾った時に、それを表示するかどうか、です。デフォルトでは、false(表示しない)になっていますので。必要ならば、trueに書き換えてください。 修正履歴 version 0.1 2019.01.03 up version 0.2 2019.01.07 upAPIを使うようにした。 補足情報 類似のサイト。 91PORN http //91porn.com/index.php https //zpai.rocks/index.php https //29.91p09.space/index.php https //91.91p01.rocks/index.php title - Chinese homemade video description - Free porn video, free amateur video, free xxx video スクリプトをインストールversion 0.1 2019.01.07 up ダウンロードできない -- 名無しさん (2019-01-04 22 41 22) ダウンロードできませんね・・・ -- 名無しさん (2020-09-08 18 50 53) 名前 コメント
https://w.atwiki.jp/javamock/pages/43.html
テキストエディタソースver1.2 テキストエディタソースver1.2Main.java TextEditor.java TextEditorModel.java Constants.java TextAreaProperties.java Logic.java LogicImpl.java ActionLogic.java ActionLogicImpl.java Main.java /** * * メインクラスです。 * @author mock * @version 1.2 * */ public class Main { /** * メインメソッドです * @param args */ public static void main([[String]][] args) { new TextEditor(); } } TextEditor.java import java.awt.HeadlessException; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JTextArea; /** * テキストエディタクラスです * * @author mock */ public class TextEditor extends JFrame implements ActionListener { /** serialVersionUID */ private static final [[long]] serialVersionUID = 1L; /** テキストエリア */ public JTextArea textArea; /** ファイル選択 */ public JFileChooser fileChooser = new JFileChooser(); /** logic */ public Logic logic = new LogicImpl(); /** actionLogic */ public ActionLogic actionLogic = new ActionLogicImpl(); /** * コンストラクタ * * @throws HeadlessException */ public TextEditor() throws HeadlessException { TextAreaProperties textAreaProperties = logic.getInitProperties(); setTitle(Constants.UNDIFINED_TITLE); logic.createMenuBar(getRootPane(), this); textArea = logic.createTextArea(textAreaProperties, this); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); pack(); } /* * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) */ @Override public void actionPerformed(ActionEvent actionEvent) { String actionCommand = actionEvent.getActionCommand(); TextEditorModel model = new TextEditorModel(); model.setFrame(this); model.setTextArea(textArea); model.setFileChooser(fileChooser); if (actionCommand.equals(Constants.MenuItem.NEW.toString())) { fileChooser = actionLogic.newFile(model); } else if (actionCommand.equals(Constants.MenuItem.OPEN.toString())) { actionLogic.openFile(model); } else if (actionCommand.equals(Constants.MenuItem.SAVE.toString())) { actionLogic.save(model); } else if (actionCommand.equals(Constants.MenuItem.SAVE_AS.toString())) { actionLogic.saveAs(model); } else if (actionCommand.equals(Constants.MenuItem.VERSION.toString())) { actionLogic.showVersionInfo(model); } } } TextEditorModel.java import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JTextArea; /** * テキストエディタに関するモデルです * @author mock * */ public class TextEditorModel { /** フレーム */ private JFrame frame; /** ファイルチューザ */ private JFileChooser fileChooser; /** テキストエリア */ private JTextArea textArea; /** * @return the frame */ public JFrame getFrame() { [[return]] frame; } /** * @param frame the frame to set */ public void setFrame(JFrame frame) { this.frame = frame; } /** * @return the fileChooser */ public JFileChooser getFileChooser() { return fileChooser; } /** * @param fileChooser the fileChooser to set */ public void setFileChooser(JFileChooser fileChooser) { this.fileChooser = fileChooser; } /** * @return the textArea */ public JTextArea getTextArea() { return textArea; } /** * @param textArea the textArea to set */ public void setTextArea(JTextArea textArea) { this.textArea = textArea; } } Constants.java import java.awt.event.KeyEvent; /** * 定数を集めたクラスです。 * * @author mock * */ public class Constants { /** 新規のタイトル名 */ public static final String UNDIFINED_TITLE = "UNDIFINED_TITLE"; /** バージョン */ public static final String VERSION = "ver1.2"; /** バージョン情報タイトル */ public static final String VERSION_TITLE = "VERSION"; /** ファイル(F)メニューラベル */ public static final String MENU_FILE_LABEL = "ファイル(F)"; /** ヘルプ(H)メニューラベル */ public static final String MENU_HELP_LABEL = "ヘルプ(H)"; public static final String INI_FILE_NAME = "texteditor.ini"; /** * メニュー項目に関する定数 * * @author mock * */ public enum MenuItem { NEW("新規(N)", KeyEvent.VK_N), OPEN("開く(O)", KeyEvent.VK_O), SAVE("上書き保存(S)", KeyEvent.VK_S), SAVE_AS("名前を付けて保存(A)", KeyEvent.VK_A), VERSION("バージョン情報(A)", KeyEvent.VK_A), ; /** メニュー項目ラベル */ private String label; /** メニュー項目ニーモニック */ private [[int]] mnemonic; /** * @param label * メニュー項目ラベル * @param mnemonic * メニュー項目ニーモニック */ MenuItem(String label, int mnemonic) { this.label = label; this.mnemonic = mnemonic; } /** * @return メニュー項目ラベル */ public final String getLabel() { return this.label; } /** * @return メニュー項目ニーモニック */ public final int getMnemonic() { return this.mnemonic; } } } TextAreaProperties.java /** * テキストエリアに関するプロパティクラスです * @author mock */ public class TextAreaProperties { /** 幅 */ private int width; /** 高さ */ private int height; /** タブサイズ */ private int tabSize; /** フォントサイズ */ private int fontSize; /** * @return the width */ public int getWidth() { return width; } /** * @param width the width to set */ public void setWidth(int width) { this.width = width; } /** * @return the height */ public int getHeight() { return height; } /** * @param height the height to set */ public void setHeight(int height) { this.height = height; } /** * @return the tabSize */ public int getTabSize() { return tabSize; } /** * @param tabSize the tabSize to set */ public void setTabSize(int tabSize) { this.tabSize = tabSize; } /** * @return the fontSize */ public int getFontSize() { return fontSize; } /** * @param fontSize the fontSize to set */ public void setFontSize(int fontSize) { this.fontSize = fontSize; } } Logic.java import java.awt.event.ActionListener; import java.io.File; import javax.swing.JFrame; import javax.swing.JMenuItem; import javax.swing.JRootPane; import javax.swing.JTextArea; /** * テキストエディタに関するロジックのインターフェースです * * @author mock */ public interface Logic { /** * 初期設定プロパティを取得します * * @return テキストエリアに関するプロパティ */ public TextAreaProperties getInitProperties(); /** * メニューバーを作成します * * @param rootPane * コンテナ * @param actionListener * アクションリスナー */ public void createMenuBar(JRootPane rootPane, ActionListener actionListener); /** * メニュー項目を設定します * * @param item * メニュー項目 * @param actionListener * アクションリスナー * @return メニュー項目 */ public JMenuItem setMenuItem(Constants.MenuItem item, ActionListener actionListener); /** * テキストエリアを作成します * * @param properties * テキストエリアに関するプロパティ * @param frame * フレーム * @return テキストエリア */ public JTextArea createTextArea(TextAreaProperties properties, JFrame frame); /** * ファイルにテキスト内容を書き込みます * * @param file * ファイル * @param text * テキスト内容 * @return 処理結果 */ public [[boolean]] writeFile(File file, String text); } LogicImpl.java import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import java.util.Properties; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JRootPane; import javax.swing.JScrollPane; import javax.swing.JTextArea; /** * テキストエディタに関するロジックの実装クラスです * * @author mock */ public class LogicImpl implements Logic { /* * @see Logic#getInitProperties() */ @Override public TextAreaProperties getInitProperties() { TextAreaProperties textAreaProperties = new TextAreaProperties(); try { Properties properties = new Properties(); properties.load(new FileInputStream(Constants.INI_FILE_NAME)); // 幅の設定 String width = properties.getProperty("textAreaWidth"); textAreaProperties.setWidth(Integer.parseInt(width)); // 高さの設定 String height = properties.getProperty("textAreaHeight"); textAreaProperties.setHeight(Integer.parseInt(height)); // タブサイズの設定 String tabSize = properties.getProperty("tabSize"); textAreaProperties.setTabSize(Integer.parseInt(tabSize)); // フォントサイズの設定 String fontSize = properties.getProperty("fontSize"); textAreaProperties.setFontSize(Integer.parseInt(fontSize)); } catch (IOException e) { e.printStackTrace(); } return textAreaProperties; } /* * @see Logic#createMenuBar(javax.swing.JRootPane, * java.awt.event.ActionListener) */ @Override public void createMenuBar(JRootPane rootPane, ActionListener actionListener) { JMenuBar menuBar = new JMenuBar(); rootPane.setJMenuBar(menuBar); // ファイル(F) JMenu menuFile = new JMenu(Constants.MENU_FILE_LABEL); menuFile.setMnemonic(KeyEvent.VK_F); menuBar.add(menuFile); // ファイル(F)>新規(N) JMenuItem menuItemNew = setMenuItem(Constants.MenuItem.NEW, actionListener); menuFile.add(menuItemNew); // ファイル(F)>開く(O) JMenuItem menuItemOpen = setMenuItem(Constants.MenuItem.OPEN, actionListener); menuFile.add(menuItemOpen); // ファイル(F)>上書き保存(S) JMenuItem menuItemSave = setMenuItem(Constants.MenuItem.SAVE, actionListener); menuFile.add(menuItemSave); // ファイル(F)>名前を付けて保存(A) JMenuItem menuItemSaveAs = setMenuItem(Constants.MenuItem.SAVE_AS, actionListener); menuFile.add(menuItemSaveAs); // ヘルプ(H) JMenu menuHelp = new JMenu(Constants.MENU_HELP_LABEL); menuHelp.setMnemonic(KeyEvent.VK_H); menuBar.add(menuHelp); // ヘルプ(H)>バージョン情報(A) JMenuItem menuItemVersion = setMenuItem(Constants.MenuItem.VERSION, actionListener); menuHelp.add(menuItemVersion); } /* * @see Logic#setMenuItem(Constants.MenuItem, java.awt.event.ActionListener) */ @Override public JMenuItem setMenuItem(Constants.MenuItem item, ActionListener actionListener) { JMenuItem menuItem = new JMenuItem(item.getLabel()); menuItem.setMnemonic(item.getMnemonic()); menuItem.setActionCommand(item.toString()); menuItem.addActionListener(actionListener); return menuItem; } /* * @see Logic#createTextArea(TextAreaProperties, javax.swing.JFrame) */ @Override public JTextArea createTextArea(TextAreaProperties properties, JFrame frame) { JTextArea textArea = new JTextArea(); JScrollPane scrollPane = new JScrollPane(textArea); scrollPane.setPreferredSize(new Dimension(properties.getWidth(), properties.getHeight())); frame.getContentPane().add(scrollPane); textArea.setBackground(Color.BLACK); textArea.setForeground(Color.WHITE); textArea.setSelectionColor(Color.BLUE); textArea.setSelectedTextColor(Color.PINK); textArea.setFont(new Font(Font.MONOSPACED, Font.PLAIN, properties .getFontSize())); textArea.setTabSize(properties.getTabSize()); textArea.setCaretColor(Color.WHITE); textArea.setLineWrap(true); textArea.grabFocus(); return textArea; } /* * @see Logic#writeFile(java.io.File, java.lang.String) */ @Override public boolean writeFile(File file, String text) { try { FileWriter fileWriter = new FileWriter(file); fileWriter.write(text); fileWriter.close(); } catch (IOException e) { e.printStackTrace(); } return true; } } ActionLogic.java import javax.swing.JFileChooser; /** * アクションに関するロジックのインターフェースです * @author mock * */ public interface ActionLogic { /** * 新規ファイルを開きます * @param model テキストエディタに関するモデル * @return JFileChooser */ public JFileChooser newFile(TextEditorModel model); /** * ファイルを開きます * @param model テキストエディタに関するモデル */ public void openFile(TextEditorModel model); /** * ファイルに上書き保存します * @param model テキストエディタに関するモデル */ public void save(TextEditorModel model); /** * ファイルに名前を付けて保存します * @param model テキストエディタに関するモデル */ public void saveAs(TextEditorModel model); /** * バージョン情報ダイアログを表示します * @param model テキストエディタに関するモデル */ public void showVersionInfo(TextEditorModel model); } ActionLogicImpl.java import java.io.File; import java.io.FileReader; import java.io.IOException; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JTextArea; /** * アクションに関するロジックの実装クラスです * @author mock * */ public class ActionLogicImpl implements ActionLogic { /** logic */ public Logic logic = new LogicImpl(); /* * @see ActionLogic#newFile(TextEditorModel) */ @Override public JFileChooser newFile(TextEditorModel model) { JFrame frame = model.getFrame(); JTextArea textArea = model.getTextArea(); frame.setTitle(Constants.UNDIFINED_TITLE); textArea.setText(""); return new JFileChooser(); } /* * @see ActionLogic#openFile(TextEditorModel) */ @Override public void openFile(TextEditorModel model) { try { JFrame frame = model.getFrame(); JTextArea textArea = model.getTextArea(); JFileChooser fileChooser = model.getFileChooser(); if (fileChooser.showOpenDialog(frame) == JFileChooser.APPROVE_OPTION) { File selectedFile = fileChooser.getSelectedFile(); FileReader fileReader = new FileReader(selectedFile); textArea.read(fileReader, null); fileReader.close(); frame.setTitle(fileChooser.getName(selectedFile)); } } catch (IOException e) { e.printStackTrace(); } } /* * @see ActionLogic#save(TextEditorModel) */ @Override public void save(TextEditorModel model) { JTextArea textArea = model.getTextArea(); JFileChooser fileChooser = model.getFileChooser(); // ファイルが既に開かれている場合 if (fileChooser.getSelectedFile() != null) { logic.writeFile(fileChooser.getSelectedFile(), textArea.getText()); return; } saveAs(model); } /* * @see ActionLogic#saveAs(TextEditorModel) */ @Override public void saveAs(TextEditorModel model) { JFrame frame = model.getFrame(); JTextArea textArea = model.getTextArea(); JFileChooser fileChooser = model.getFileChooser(); // ファイルダイアログ「保存」が選択された場合 if (fileChooser.showSaveDialog(frame) == JFileChooser.APPROVE_OPTION) { logic.writeFile(fileChooser.getSelectedFile(), textArea.getText()); File selectedFile = fileChooser.getSelectedFile(); frame.setTitle(fileChooser.getName(selectedFile)); } } /* * @see ActionLogic#showVersionInfo(TextEditorModel) */ @Override public void showVersionInfo(TextEditorModel model) { JFrame frame = model.getFrame(); JOptionPane.showMessageDialog(frame, Constants.VERSION, Constants.VERSION_TITLE, JOptionPane.INFORMATION_MESSAGE); } }