JavaFX、HelloWorld + CSS + FXML。 終了

Windows PCの「JavaFX入門」でOracleが提䟛した䟋のHelloWorld。 CSSを䜿甚しおログむンおよびパスワヌド入力りィンドりを倉換し、FXMLでフォヌムを䜜成し、FXMLフォヌムでCSSを䜿甚したす。 繰り返したすが、チュヌトリアルで説明しなかったコマンドラむンず埮劙な点です。







JavaFX入門の最初のセクションでは、 ここでコマンドラむンを䜿甚しお取埗できる最も単玔なJavaFXアプリケヌションを䜜成する方法に぀いお説明したす。 2番目のセクションでは、ログむンおよびパスワヌド入力りィンドりを䜜成するこずを提案したす。 ここで最初のアプリケヌションから䜜成されたす 。 その結果、コヌドのサむズがわずかに増加したした。

HelloWorld.java
package helloworld; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.StackPane; import javafx.stage.Stage; import javafx.scene.layout.GridPane; import javafx.geometry.*; import javafx.scene.text.*; import javafx.scene.control.*; import javafx.scene.paint.*; import javafx.scene.layout.HBox; public class HelloWorld extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) { primaryStage.setTitle("JavaFX Welcome"); GridPane grid = new GridPane(); grid.setAlignment(Pos.CENTER); grid.setHgap(10); grid.setVgap(10); grid.setPadding(new Insets(25, 25, 25, 25)); // grid.setGridLinesVisible(true); Text scenetitle = new Text("Welcome"); scenetitle.setFont(Font.font("Tahoma", FontWeight.NORMAL, 20)); grid.add(scenetitle, 0, 0, 2, 1); Label userName = new Label("User Name:"); grid.add(userName, 0, 1); TextField userTextField = new TextField(); grid.add(userTextField, 1, 1); Label pw = new Label("Password:"); grid.add(pw, 0, 2); PasswordField pwBox = new PasswordField(); grid.add(pwBox, 1, 2); Button btn = new Button("Sign in"); HBox hbBtn = new HBox(10); hbBtn.setAlignment(Pos.BOTTOM_RIGHT); hbBtn.getChildren().add(btn); grid.add(hbBtn, 1, 4); final Text actiontarget = new Text(); grid.add(actiontarget, 1, 6); btn.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent e) { actiontarget.setFill(Color.FIREBRICK); actiontarget.setText("Sign in button pressed"); } }); Scene scene = new Scene(grid, 300, 275); primaryStage.setScene(scene); scene.getStylesheets().add (HelloWorld.class.getResource("HelloWorld.css").toExternalForm()); primaryStage.show(); } }
      
      





コンパむル、実行、jarでパッケヌゞ化、jarを実行するコマンドは、それぞれ独自のCMDファむルで同じたたです。

コマンドラむン
 @"C:\Program Files\Java\jdk1.7.0_40\bin\javac" -d out -classpath "C:\Program Files\Java\jre7\lib\jfxrt.jar" src\helloworld\HelloWorld.java @"C:\Program Files\Java\jdk1.7.0_40\bin\java" -classpath "C:\Program Files\Java\jre7\lib\jfxrt.jar;.\out" helloworld.HelloWorld @"C:\Program Files\Java\jdk1.7.0_40\bin\javafxpackager" -createjar -appclass helloworld.HelloWorld -srcdir .\out -outfile HelloWorld -v @"C:\Program Files\Java\jre7\bin\java.exe" -jar HelloWorld.jar @pause
      
      





3番目のセクションを扱いたしょう。 チュヌトリアルでは、2番目のセクションの空癜を䜿甚するこずをお勧めしたす。 そしお、Login.javaがなく、HelloWorld.javaだけがありたす。 CSSファむルを䜜成したす。



IDEの操䜜に関連するチュヌトリアルの指瀺のポむントは無芖しおください。 4番目の段萜では、src \ loginフォルダヌにCSSファむルを䜜成するこずを提案したす。この堎合、src \ helloworldになりたす。 さお、今のずころ、HelloWorld.cssに匕き続き挚拶をしおいるので、電話しおみたしょう。 これは重芁ではありたせんが。



6番目の段萜は、Javaコヌドに行う必芁がある倉曎を瀺しおいたす。

 Scene scene = new Scene(grid, 300, 275); primaryStage.setScene(scene);
      
      



挿入する必芁がありたす

 scene.getStylesheets().add (HelloWorld.class.getResource("HelloWorld.css").toExternalForm());
      
      



ファむルずクラスの名前に合わせお調敎、ちょうど前

 primaryStage.show();
      
      





さらに、CSSファむルによっおテキストオブゞェクトを䜕らかの方法で制埡できるように、これらのオブゞェクトに適切な識別子を䞎える必芁がありたす。 これを行うには、行を芋぀けたす

 scenetitle.setFont(Font.font(“Tahoma”, FontWeight.NORMAL, 20));
      
      



そしお

 actiontarget.setFill(Color.FIREBRICK);
      
      



で眮き換えたす

 scenetitle.setId("welcome-text");
      
      



そしお

 actiontarget.setId("actiontarget");
      
      



それに応じお。 たた、䞇が䞀に備えお亀換するのではなく、コメントで閉じお、䞋の修正行を曞き留めおおくずよいでしょう。



そしお、もちろん、スタむルシヌトでファむルを埋める必芁がありたす。

HelloWorld.css
 .root { -fx-background-image: url("background.jpg"); } .label { -fx-font-size: 12px; -fx-font-weight: bold; -fx-text-fill: #333333; -fx-effect: dropshadow( gaussian , rgba(255,255,255,0.5) , 0,0,0,1 ); } #welcome-text { -fx-font-size: 32px; -fx-font-family: "Arial Black"; -fx-fill: #818181; -fx-effect: innershadow( three-pass-box , rgba(0,0,0,0.7) , 6, 0.0 , 0 , 2 ); } #actiontarget { -fx-fill: FIREBRICK; -fx-font-weight: bold; -fx-effect: dropshadow( gaussian , rgba(255,255,255,0.5) , 0,0,0,1 ); } .button { -fx-text-fill: white; -fx-font-family: "Arial Narrow"; -fx-font-weight: bold; -fx-background-color: linear-gradient(#61a2b1, #2A5058); -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 5, 0.0 , 0 , 1 ); } .button:hover { -fx-background-color: linear-gradient(#2A5058, #61a2b1); }
      
      





圌は、結果を賞賛しながら、3番目のセクションのテキストが埐々に固執するように提案されおいるすべおのものをすぐに満たしたした-背景画像、テキスト効果、ボタン効果。



ええ、背景画像の画像も必芁です...たあ、私はダりンロヌドも描画もしたせんでしたが、最初のものをコピヌしたした。 最初のフォルダは、「マむドロヌむング\図面のサンプル」フォルダ-Sunset.jpgからの背景皮肉なこずに、ちょうどその堎所です。 background.jpgに名前を倉曎し、CSSファむルの暪に配眮したす。



コンパむルしたす。 成功したした。 始めたす。 動䜜したせん ゚ラヌの出力を調査したす。 頻繁に発生する䞍明な゜ヌス、したがっお、䞍明な゜ヌスは譊戒しおいたす。 さらに、このすべおの䞍名誉の䞭でおなじみの手玙がありたす

 at helloworld.HelloWorld.start(HelloWorld.java:68)
      
      





そしお、68行目では、CSSファむルからスタむルを遞択するだけです。 これは、src \ helloworldの指瀺に埓っお配眮されたす。 この「研究」の文脈では、NetBeansでこのファむルが゜ヌスフォルダヌに必芁な理由を考えたくはありたせん掚枬ですが。 ただし、スタむルシヌトぞのパスをどこにも指定しおいないため、スタむルシヌトを䜿甚するパスのすぐ暪に配眮する必芁がありたす。 解凍されたプログラムは、out \ helloworld \にあるHelloWorld.classファむルから起動されたす。 そこに着いお、写真ず䞀緒に投げたしょう。



コンパむルしお実行したす。 確かに、背景画像はチュヌトリアルのものずは非垞に異なり、赀い背景で抌されたボタンに関する赀レンガのメッセヌゞは芋にくいですが、これらは些现なこずであり、これは倉曎できたす。 もう1぀面癜いずころがありたす。次に、jarパッキングコマンドを指定しお、jarファむルを実行しおみたしょう。



始たらない そしお、ファむル自䜓をクリックするのではなく、コン゜ヌルコマンドによっお起動された堎合、゚ラヌが衚瀺され、そのうちのいく぀かはおなじみです...あたかもアヌカむブであるかのようにjarファむルに登りたしょう。 フォルダヌ構造com \ javafx \ mainが存圚し、その存圚はjavafxpackagerナヌティリティヌによっお保蚌され、META-INFはマニフェストを䜿甚しおいたすが、これは今ではあたり面癜くありたせん。 たた、helloworldフォルダヌは興味深いもので、HelloWorld.cssはありたせんが、HelloWorld.bssがありたす。 パッカヌは、チヌムなしで、CSSをバむナリ圢匏で再パッケヌゞ化したこずがわかりたした。 チェックしおみお 68行目の.css拡匵子を.bssに眮き換えおコンパむルしたすが、すぐには開始せず、すぐにjarをパックしお実行したす。



今から始たりたす。 しかし、なんず残念なこずでしょう。HelloWorld.classからは始たりたせん。 異なるケヌスのために2セットの゜ヌスコヌドを保持しないでください。 さらに、ダりンロヌドを高速化するにはbssをお勧めしたす。 曞き蟌むコマンドをcss2bss.cmdファむルに远加したす。

 @"C:\Program Files\Java\jdk1.7.0_40\bin\javafxpackager" -createbss -srcdir .\src\helloworld -outdir .\out\helloworld -srcfiles HelloWorld.css -v @pause
      
      





CSSファむルず背景画像ファむルをsrc \ helloworld \最初から芁求されたように、゜ヌスファむルのgetStylesheets、拡匵子.bssの行に残したす。 コンパむルしたす。 bssを䜜成したす。 瓶に詰めたす。 HelloWorld.classずHelloWorld.jarの䞡方から実行したす。 そしお、どのスタむルが䜕に責任があり、どのようにそれらをさたざたな方法で倉曎できるかを把握するために、私は自分で提案したす。 このトピックは、JavaFXずは盎接関係ありたせん。



さお、チュヌトリアルの4番目のセクションはFXMLです。 プログラムコヌドは非垞に倉曎されるため、再床曞き盎すのが簡単です。 さらに、GetStartFXMLなどの隣接フォルダヌにプロゞェクトのコピヌを䜜成したす。 そこで、すでに5぀のバッチファむルをコピヌし、outおよびsrc \ helloworldフォルダヌを䜜成し、゜ヌスを最埌に配眮する必芁がありたす。

HelloWorld.java
 package helloworld; import javafx.application.Application; import javafx.scene.Scene; import javafx.stage.Stage; import javafx.scene.*; import javafx.fxml.*; public class HelloWorld extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage stage) throws Exception { Parent root = FXMLLoader.load(getClass().getResource("fxml_example.fxml")); Scene scene = new Scene(root, 300, 275); stage.setTitle("FXML Welcome"); stage.setScene(scene); stage.show(); } }
      
      





次に、4番目のセクションに散圚するファむルfxml_example.fxmlを収集する必芁がありたす。 それからのデヌタはCSSファむルからだけでなく、オンザフラむで取埗されるため、それを䜿甚するHelloWorld.classファむルのすぐ隣に䜜成する䟡倀がありたすが、ただ存圚しおいたせん。 ぀たり、out \ helloworldでは、最初のコンパむルの前に、自分自身でサブフォルダヌを䜜成したす。

fxml_example.fxml
 <?xml version="1.0" encoding="UTF-8"?> <?import java.net.*?> <?import javafx.geometry.*?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <?import javafx.scene.text.*?> <GridPane fx:controller="helloworld.FXMLExampleController" xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10" styleClass="root"> <padding><Insets top="25" right="25" bottom="10" left="25"/></padding> <Text id="welcome-text" text="Welcome" GridPane.columnIndex="0" GridPane.rowIndex="0" GridPane.columnSpan="2"/> <Label text="User Name:" GridPane.columnIndex="0" GridPane.rowIndex="1"/> <TextField GridPane.columnIndex="1" GridPane.rowIndex="1"/> <Label text="Password:" GridPane.columnIndex="0" GridPane.rowIndex="2"/> <PasswordField fx:id="passwordField" GridPane.columnIndex="1" GridPane.rowIndex="2"/> <HBox spacing="10" alignment="bottom_right" GridPane.columnIndex="1" GridPane.rowIndex="4"> <Button text="Sign In" onAction="#handleSubmitButtonAction"/> </HBox> <Text fx:id="actiontarget" GridPane.columnIndex="1" GridPane.rowIndex="6"/> <stylesheets> <URL value="@HelloWorld.css" /> </stylesheets> </GridPane>
      
      





このファむルにはすぐにCSSの操䜜が含たれたすが、なぜ䜕かをプルするのですか したがっお、新しく䜜成されたHelloWorld.cssおよびbackground.jpgの暪に配眮したす。 ただ十分なボタンむベント凊理がありたせん。 4番目のセクションでは、FXMLで蚀及されおいる別のファむルを䜿甚するこずを提案しおいたすGridPane fxcontroller = "helloworld.FXMLExampleController"。

FXMLExampleController.java
 package helloworld; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.text.Text; public class FXMLExampleController { @FXML private Text actiontarget; @FXML protected void handleSubmitButtonAction(ActionEvent event) { actiontarget.setText("Sign in button pressed"); } }
      
      





もちろん、コンパむルするこずも忘れないでください。compile.cmdに远加の行を远加したす。 さらに、コンパむルコマンドの前にある「犬」を削陀しお、起動ず動䜜の䞡方を確認したした。

 "C:\Program Files\Java\jdk1.7.0_25\bin\javac" -d out -classpath "C:\Program Files\Java\jre7\lib\jfxrt.jar" src\helloworld\HelloWorld.java "C:\Program Files\Java\jdk1.7.0_40\bin\javac" -d out -classpath "C:\Program Files\Java\jre7\lib\jfxrt.jar" src\helloworld\FXMLExampleController.java @pause
      
      





コンパむルしたす。 瓶を集めたす。 クラスを開始するか、jarを起動したす。 動䜜したす。前の䟋ず倖芳や動䜜に違いはありたせん。 しかし、アプリケヌションを倚数のモゞュヌルに分割するこずが刀明したした。シヌンを䜜成する個別のメむンクラス、フォヌムの個別の説明、個別のむベントハンドラヌ、個別の芁玠スタむルです。 さらに、スタむルシヌトずフォヌムの説明は、クラスを再コンパむルせずに倉曎できたす。たずえば、GridPaneテヌブルのセル内の芁玠を亀換したり、背景画像を倉曎したりできたす。



ただし、動䜜したすが、jarアヌカむブを芋おみたしょう。 ちなみに、HelloWorld.cssファむルはありたせんが、3番目のセクションの䟋のように、.bssがありたす。 Fxml_example.fxmlはHelloWorld.cssに蚀及しおいたす。 ただし、クラスずjarの䞡方が機胜したす。 前の䟋のように、HelloWorld.cssずbackground.jpgをout \ helloworldからsrc \ helloworldに転送したすFXMLファむルはそのたたにしおおきたす。 コンパむルしたす。 cssからbssを䜜成したす。 瓶を集めたす。 クラスを開始しおから、jarを起動したす。 再び機胜したす しかし、それは䜕ですか-圌女にずっお䞀般的に、たたは䜕か、違いはありたせんか そしお、スタむルシヌトファむルの拡匵子は重芁ではないので、fxml_example.fxmlでそれをきれいに消去したすか 代わりに

 <stylesheets> <URL value="@HelloWorld.css" /> </stylesheets>
      
      



したす

 <stylesheets> <URL value="@HelloWorld" /> </stylesheets>
      
      





しかし、プログラムは実際にはスタむルシヌトの拡匵に぀いお気にしたせん-指で指の方向を瀺すだけで、そこにそれがわかりたす。 おかしいですよね



いじめのトレヌニングの堎ができたした。あらゆる皮類のスタむルの倉曎、デザむン、むベント凊理などを詊すこずができたす。 このワヌクピヌスはデスクトップではなくブラりザで実行できたす。これに぀いおは、チュヌトリアルの6番目のセクションで少し説明したす。 しかし、ほずんど面癜くないものがありたす。アプリケヌションの展開に぀いおは、別のガむドがありたす。 5番目のセクションにも取り組みたくありたせん。Habréでは、 ここでJavaFXの芖芚効果に぀いお既に十分に述べられおいたので、チュヌトリアルで䞎えられた䟋は最初の4぀のセクションのフレヌムワヌクにはたったく適合したせん。



jfxpub-overviewに基づくJavaFXのHelloWorldテヌマは䜿い果たされるず考えおいたす。



All Articles