質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

1回答

276閲覧

JavaとJavaFXの連動について

junkjunk

総合スコア26

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2019/06/13 06:44

前提・実現したいこと

JavaプログラムとJavaFXで作成したGUIを繋げたい

現在、指定したフォルダ下の複数ファイルを圧縮するプログラムを作成しています。
プログラム自体はeclipseを用いてJavaで書いたのですが、他の人が簡単にプログラムを動かせるように、圧縮元のファイルアドレスや圧縮先のフォルダアドレスなどを入力出来るGUIでプログラムを動かしたいと考えています。
GUIはeclipseからJavaFXプログラムを作成→scene builderを起動して作成しました。

その後、JavaFXとJavaを連動させて(JavaFXのTextFiledで読み込んだ値をJavaに引き渡すなど)プログラムをGUIで動かそうと思ったのですが、調べてみたところJavaとJavaFXは完全に独立していた言語で、変数の参照などは出来ないように読み取れたんですが実際にそうなんでしょうか?

また、その場合Javaプログラムの中身自体をJavaFXで書き直す必要があると思うのですが、TextFiledで読み込んだ値を変数に納めてプログラム内で計算に使うにはどのようにすればいいのか、サイトを探してもまだ見つけられていないので参考になるようなサイトがあれば教えて頂きたいです。

よろしくお願い致します。

Java

1import java.io.File; 2import java.io.IOException; 3import java.nio.file.Files; 4import java.nio.file.Path; 5import java.nio.file.Paths; 6import java.text.SimpleDateFormat; 7import java.util.Calendar; 8import java.util.Scanner; 9 10public class a { 11 public static void main(String[] args) { 12 13 try { //最後にfinally節でclose処理したい(出来ない) 14 15 //////////保存先のディレクトリの作成 16 // Windows Vista 以降での仕様(UAC)でシステムルートドライブ(C:\)には書き込めない(管理者権限の昇格が必要)のでとりあえずD:に作成 17 //"D:\test"にするとファイル名が\testになる 18 19 System.out.println("新しく作成するディレクトリのアドレスを入力してください。"); 20 21 //Scannerで入力を受け付け 22 23 Scanner scan1 = new Scanner(System.in); 24 25 //nextメソッドで入力された文字の読み取り 26 //nextは文字を文字列として読み込み、nextIntは数値として読み込み 27 String str1 = scan1.next(); 28 29 System.out.println("入力されたアドレス:" + str1 + ""); 30 //scan1.close(); 31 32 //Fileクラスのオブジェクトを生成 33 File newdir = new File(str1); 34 35 if(newdir.exists()) { 36 System.out.println("既に存在しているディレクトリです"); 37 }else if (newdir.mkdir()){ 38 System.out.println("ディレクトリの作成に成功しました"); 39 }else{ 40 System.out.println("ディレクトリの作成に失敗しました"); 41 } 42 43 44 //File newdir = new File("D:\test\sub"); 45 46 //if (newdir.mkdir()){ 47 //System.out.println("ディレクトリの作成に成功しました"); 48 //}else{ 49 //System.out.println("ディレクトリの作成に失敗しました"); 50 //} 51 52 53 /////////ファイルのコピー 54 System.out.println("ログファイルのあるアドレスを入力してください"); 55 //Fileクラスのオブジェクトを作成 56 Scanner scan2 = new Scanner(System.in); 57 String str2 = scan2.next(); 58 System.out.println("入力されたアドレス:" + str2 + ""); 59 60 61 File dir = new File(str2); 62 //listFiles:指定したディレクトリに含まれるファイルやディレクトリを配列で返す 63 File[] list = dir.listFiles(); 64 65 //nullチェック 66 //listfilesは指定したパス名がディレクトリを示さない場合や入出力エラーが発生した場合にnullを返す 67 //null状態のままオブジェクト配列を参照するとjava.lang.NullPointerExceptionの例外が発生 68 if(list != null) { 69 //読み込んだファイルやディレクトリの数を表示 70 System.out.println("OK"); 71 } else { 72 System.out.println("null"); 73 } 74 75 //最終更新日時表示書式 76 //SimpleDateFormat(String)で指定されたパターン、デフォルトのロケール、日付フォーマット記号を持つ、オブジェクトを生成 77 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 78 79 //CalendarクラスやDateクラスは月を0~11で表すため一カ月ずれる!! 80 //日時の設定 81 Calendar start = Calendar.getInstance(); 82 System.out.println("取得したいログの開始時間を入力してください(年、月、日、時間、分、秒)"); 83 int scanstart[] = new int[6]; 84 Scanner scst = new Scanner(System.in); 85 for(int i = 0; i < scanstart.length; i++) { 86 scanstart[i] = scst.nextInt(); 87 } 88 //scst.close(); 89 90 //start.set(2019, 4, 8, 6, 00, 00); 91 start.set(scanstart[0],scanstart[1],scanstart[2],scanstart[3],scanstart[4],scanstart[5]); 92 93 //日時の設定 94 Calendar end = Calendar.getInstance(); 95 System.out.println("取得したいログの終了時間を入力してください(年、月、日、時間、分、秒)"); 96 int scanend[] = new int[6]; 97 Scanner scend = new Scanner(System.in); 98 for(int i = 0; i < scanend.length; i++) { 99 scanend[i] = scend.nextInt(); 100 } 101 //sced.close(); 102 103 //end.set(2019, 4, 8, 12, 00, 00); 104 end.set(scanend[0],scanend[1],scanend[2],scanend[3],scanend[4],scanend[5]); 105 106 for (int i=0; i<list.length; i++) { 107 108 // ファイルの最終更新日時(タイムスタンプ)を取得 109 // 1970年1月1日0時0分0秒からの経過ミリ秒 110 long lastModified = list[i].lastModified(); 111 112 //最終更新日時書式整形 113 //String lastModifiedStr = sdf.format(lastModified); 114 115 System.out.println(list[i]); 116 //System.out.println(lastModifiedStr); 117 118 //ファイルのコピー 119 Path sourcePath = Paths.get(list[i].getPath()); 120 Path destinationPath = Paths.get(str1 + "\" + list[i].getName() + ".txt"); 121 122 //あsファイルの更新日時をlong型からCalendar型に変換 123 Calendar source = Calendar.getInstance(); 124 //setTimeInMillis:Calendar の現在時刻を、指定された long 値から設定 125 source.setTimeInMillis(lastModified); 126 127 128 129 //cal1.compareTo(cal2) 130 //同じなら0、cal1過去・cal2(引数)が未来なら負数1、cal1が未来なら正数を返す 131 int diff1 = source.compareTo(start); 132 int diff2 = source.compareTo(end); 133 134 if(diff1 > 0 && diff2 < 0) { 135 //ファイルのコピー 136 try { 137 Files.copy(sourcePath,destinationPath); 138 } catch (IOException e) { 139 e.printStackTrace(); 140 } 141 } 142 143 //c_zip.zip( 144 //"D:\test\subzip.zip", "sourcePath"); 145 146 147 } 148 //Zip化:ファイルの更新日時がプログラムの更新日時を上書きしてる 149 ZipCompressUtils.compressDirectory("D:\test\subzip.zip", str1); 150 151 152 153 } finally { 154 //scend.close(); 155 } 156 } 157 158} 159

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/06/15 11:07

連携云々よりスコープを勉強してからのほうがいいかと JavaFX(ライブラリ)
junkjunk

2019/06/17 01:19

コメントありがとうございます。 asahina1979さんのコメントを参考に調べてみましたが、 https://docs.oracle.com/javase/jp/8/javafx/get-started-tutorial/jfx-overview.htm こちらのサイトを読む限りでは「JavaFXライブラリはJava APIとして記述されているため、JavaFXアプリケーション・コードは任意のJavaライブラリのAPIを参照できます。たとえば、JavaFXアプリケーションでJava APIライブラリを使用して、ネイティブなシステム機能にアクセスし、サーバー・ベースのミドルウェア・アプリケーションに接続できます。」との記述より、JavaFXからJava APIのクラスを参照出来ると認識しました が、以下のサイトによると http://msugai.fc2web.com/java/scope.html 「変数は宣言された場所以外からはアクセスできません。あるメソッド内で宣言されればその変数名は当該メソッド内でしか有効ではないということです。別のメソッドで同じ変数名を参照しても、全く別の変数が参照されます。」との記述からクラスは参照出来ても同じ変数として扱うことが出来ない、と読み取れるのですが合っているでしょうか? 引数を渡して変数をやり取りすれば出来そうな気がしてしまうのですが、検討違いでしたらすみません。
guest

回答1

0

自己解決

JavaFXのFXMLコントローラーにプログラムを記述することによりテキストの読み込みなど行うことが出来ました。

投稿2019/06/17 06:44

junkjunk

総合スコア26

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問