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

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

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

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

Java

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

Q&A

解決済

1回答

1717閲覧

アプリによくある、使っているウィンドウ以外をクリックすると、警告音とともにウィンドウが点滅するやつをJavaFXで作りたいです。

tntn70200751

総合スコア18

JavaFX

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

Java

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

0グッド

0クリップ

投稿2021/05/30 09:06

編集2021/05/30 09:09

前提・実現したいこと

GUIアプリケーションの練習を兼ねて、ログイン画面を作っています。

まず、ホーム画面があって、その画面のログインボタンを押すとログイン用のユーザー名とパスワードを入力するフィールドを持ったウィンドウが出てくるのですが、今のままだとこの画面をいくらでも出すことができてしまいます。

そうなってしまうと困るので、よくアプリにある入力中のウィンドウ以外をクリックすると警告音とともに、ウィンドウがチカチカと点滅する機能を実装したいと思っています。

質問の前に検索してみようと思い、何と検索すればいいのかわからず、一応「JavaFX ウィンドウ 点滅」とかで検索したのですが何もヒットしませんでした。

一応参考のためにコードはすべて貼りましたが、このコードを動くように書き直してほしいという意図ではありません。

また、この機能に名称があるなら教えていただけると助かります。

現在の画面

ホーム画面
トップ画面

ログイン画面
ログイン画面

上の画面のログインを押すと下の画面が出ます。
この状態だと、ホーム画面のログインを押すたびにウィンドウが出てしまいます。

サインアップボタンの先はまだ作っていません

該当のソースコード

Main.java

java

1 2import javafx.application.Application; 3import javafx.fxml.FXMLLoader; 4import javafx.scene.Scene; 5import javafx.scene.layout.VBox; 6import javafx.stage.Stage; 7 8public class Main extends Application { 9 10 @Override 11 public void start(Stage primaryStage) throws Exception { 12 13 VBox root = FXMLLoader.load(getClass().getResource("./MainWindow.fxml")); 14 15 primaryStage.setScene(new Scene(root)); 16 primaryStage.show(); 17 18 } 19 20 public static void main(String[] args) { 21 22 launch(); 23 24 } 25 26} 27

fxml

1 2MainWidow.fxml 3<?xml version="1.0" encoding="UTF-8"?> 4 5<?import javafx.geometry.Insets?> 6<?import javafx.scene.control.Button?> 7<?import javafx.scene.control.Label?> 8<?import javafx.scene.layout.VBox?> 9 10<VBox alignment="CENTER" depthTest="DISABLE" prefHeight="169.0" prefWidth="272.0" xmlns="http://javafx.com/javafx/16" xmlns:fx="http://javafx.com/fxml/1" fx:controller="MainController"> 11 <children> 12 <Label alignment="CENTER" contentDisplay="CENTER" prefHeight="17.0" prefWidth="176.0" text="テスト"> 13 <VBox.margin> 14 <Insets bottom="30.0" top="10.0" /> 15 </VBox.margin> 16 </Label> 17 <Button id="loginButton" fx:id="loginButton" alignment="CENTER" contentDisplay="CENTER" mnemonicParsing="false" onMouseClicked="#showLoginWindow" prefHeight="25.0" prefWidth="177.0" text="ログイン"> 18 <opaqueInsets> 19 <Insets /> 20 </opaqueInsets> 21 <VBox.margin> 22 <Insets bottom="10.0" top="10.0" /> 23 </VBox.margin> 24 </Button> 25 <Button fx:id="signupButton" alignment="CENTER" contentDisplay="CENTER" mnemonicParsing="false" onMouseClicked="#showSignupWindow" prefHeight="25.0" prefWidth="177.0" text="サインアップ"> 26 <VBox.margin> 27 <Insets top="10.0" /> 28 </VBox.margin> 29 </Button> 30 </children> 31 <opaqueInsets> 32 <Insets /> 33 </opaqueInsets> 34</VBox> 35

MainController.java

java

1 2import java.io.IOException; 3 4import javafx.fxml.FXML; 5import javafx.fxml.FXMLLoader; 6import javafx.scene.Scene; 7import javafx.scene.control.Button; 8import javafx.scene.layout.VBox; 9import javafx.stage.Stage; 10 11public class MainController { 12 13 @FXML 14 private Button loginButton; 15 16 @FXML 17 private Button signupButton; 18 19 @FXML 20 public void showLoginWindow() { 21 //System.out.println("this is showLoginWindow method"); 22 23 VBox root = null; 24 25 try { 26 root = FXMLLoader.load(getClass().getResource("./LoginWindow.fxml")); 27 } catch (IOException e) { 28 e.printStackTrace(); 29 } 30 31 Stage stage = new Stage(); 32 stage.setScene(new Scene(root)); 33 stage.show(); 34 35 } 36 37 @FXML 38 public void showSignupWindow() { 39 System.out.println("this is showSingupWindow method"); 40 } 41 42} 43

LoginWindow.fxml

fxml

1 2<?xml version="1.0" encoding="UTF-8"?> 3 4<?import javafx.geometry.Insets?> 5<?import javafx.scene.control.Button?> 6<?import javafx.scene.control.Label?> 7<?import javafx.scene.control.PasswordField?> 8<?import javafx.scene.control.TextField?> 9<?import javafx.scene.layout.VBox?> 10<?import javafx.scene.text.Font?> 11 12<VBox fx:id="root" alignment="CENTER" prefHeight="259.0" prefWidth="367.0" xmlns="http://javafx.com/javafx/16" xmlns:fx="http://javafx.com/fxml/1" fx:controller="LoginController"> 13 <children> 14 <Label text="ログイン"> 15 <font> 16 <Font size="28.0" /> 17 </font> 18 <VBox.margin> 19 <Insets bottom="20.0" top="20.0" /> 20 </VBox.margin> 21 </Label> 22 <Label alignment="CENTER" prefHeight="17.0" prefWidth="272.0" text="ユーザー名"> 23 <VBox.margin> 24 <Insets left="20.0" right="20.0" /> 25 </VBox.margin> 26 </Label> 27 <TextField fx:id="userNameField" onKeyPressed="#onKeyPressed"> 28 <VBox.margin> 29 <Insets bottom="10.0" left="40.0" right="40.0" top="10.0" /> 30 </VBox.margin> 31 </TextField> 32 <Label alignment="CENTER" prefHeight="17.0" prefWidth="252.0" text="パスワード"> 33 <VBox.margin> 34 <Insets left="20.0" right="20.0" /> 35 </VBox.margin> 36 </Label> 37 <PasswordField fx:id="passwordField" onKeyPressed="#onKeyPressed"> 38 <VBox.margin> 39 <Insets bottom="20.0" left="40.0" right="40.0" top="10.0" /> 40 </VBox.margin> 41 </PasswordField> 42 <Button fx:id="loginButton" disable="true" mnemonicParsing="false" onAction="#executeLogin" onKeyPressed="#onKeyPressed" prefHeight="25.0" prefWidth="338.0" text="ログイン"> 43 <VBox.margin> 44 <Insets bottom="20.0" left="40.0" right="40.0" /> 45 </VBox.margin> 46 </Button> 47 </children> 48 <opaqueInsets> 49 <Insets /> 50 </opaqueInsets> 51</VBox> 52

LoginController.java

java

1 2import static javafx.scene.input.KeyCode.*; 3 4import javafx.fxml.FXML; 5import javafx.scene.Node; 6import javafx.scene.control.Button; 7import javafx.scene.control.PasswordField; 8import javafx.scene.control.TextField; 9import javafx.scene.input.KeyEvent; 10import javafx.scene.layout.VBox; 11 12public class LoginController { 13 14 @FXML 15 VBox root; 16 17 @FXML 18 TextField userNameField; 19 20 @FXML 21 PasswordField passwordField; 22 23 @FXML 24 Button loginButton; 25 26 @FXML 27 public void onKeyPressed(KeyEvent e){ 28 29 Node source = (Node)e.getSource(); 30 31 if(e.getCode() == ESCAPE) { 32 closeWindow(); 33 } 34 35 if(source == userNameField) { 36 if(e.getCode() == ENTER) { 37 passwordField.requestFocus(); 38 } 39 }else if(source == passwordField) { 40 if(e.getCode() == ENTER) { 41 executeLogin(); 42 } 43 }else if(source == loginButton) { 44 if(e.getCode() == ENTER) { 45 executeLogin(); 46 } 47 } 48 49 if(isTextFieldEmpty(userNameField) && isTextFieldEmpty(passwordField)) { 50 loginButton.setDisable(false); 51 }else { 52 loginButton.setDisable(true); 53 } 54 55 } 56 57 private boolean isTextFieldEmpty(TextField field) { 58 if(field.getText() == null) { 59 return false; 60 } 61 if(field.getText().equals("")) { 62 return false; 63 } 64 return true; 65 } 66 67 @FXML 68 public void executeLogin() { 69 System.out.println("ログイン"); 70 } 71 72 @FXML 73 public void closeWindow() { 74 root.getScene().getWindow().hide(); 75 } 76 77} 78

イメージ説明

開発環境

  • widows
  • eclipse

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

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

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

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

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

guest

回答1

0

ベストアンサー

よくアプリにある入力中のウィンドウ以外をクリックすると警告音とともに、ウィンドウがチカチカと点滅する機能を実装したいと思っています。

「ウィンドウがチカチカ」はOSやGUI環境によりますが、恐らく「モーダル(modal)」ウィンドウ、同ダイアログボックスのことだと思います。反対に、当該ウィンドウの表示中に同じアプリ中の他のウィンドウにフォーカスをあてることができるのは「モードレス(modeless)」といいます。

「JavaFX モーダル」などとキーワード指定して検索するとお求めの情報に辿り着けるかと思います。

javafx.stage.Modality

投稿2021/05/30 09:31

編集2021/05/30 09:33
dodox86

総合スコア9256

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

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

tntn70200751

2021/05/30 11:52

できました! ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問