In: Computer Science
Write a Java application with a JavaFXGUI that takes a String input by the user and shows whether the string contains all 26 letters of the (English version of the Latin) alphabet. For example, "Pack my box with five dozen liquor jugs" contains all 26 letters, but "The quick frown box jumps over the hazy log" does not contain a d. It does not matter whether one or more letters appear more than once.
The GUI needs, at minimum, a label to say "Enter String: ", a TextBox to take input for the String, a label to show the answer ("String contains all 26 letters" or "String does not contain all 26 letters", and a button to trigger the method to determine the outcome.
Hints:
/************************
GuiApp.java
********************/
package gui.fx;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class GuiApp extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("String Check");
Label lbl1 = new Label("Enter String:"); //label
TextField txt = new TextField(); //Text field where string will be
input
txt.setPrefSize(400, 40);
txt.setMaxWidth(400); //max width is set to 400
Label lbl2 = new Label(""); //label for showing final outcome
Button btn = new Button(); //button : on click of this final
outcome will be shown
btn.setText("Get Result");
btn.setOnAction(new EventHandler<ActionEvent>() { //this will
be triggered when button is clicked
@Override
public void handle(ActionEvent event) {
String textToCheck = txt.getText(); //get the text from
textfield
String result = checkResult(textToCheck); //get the result by
calling checkResult() method
lbl2.setText(result);//set the outcome in lbl2
}
});
//add all the above in a VBox
VBox root = new VBox(20); //VBox will put all the children with a
vertical gap of 20
root.getChildren().add(lbl1);//add lbl1
root.getChildren().add(txt);//add text field
root.getChildren().add(btn);//add the button
root.getChildren().add(lbl2);//add lbl2 to show the outcome
primaryStage.setScene(new Scene(root, 500, 300));
primaryStage.show();
}
/**
* The method checks whether the given text contains all the 26
letters or not
* @param text
* @return
*/
private String checkResult(String text){
String result = null;
String tempText = text.toLowerCase(); //converts text
into all lower case
boolean isLetterPresent = true;
for(char currentLetter = 'a' ; currentLetter <='z';
currentLetter++){ //loop through each letter from a to z
//System.out.println(String.valueOf(currentLetter));
if(!tempText.contains(String.valueOf(currentLetter))){ //if
tempText doesnot contain the current character
isLetterPresent
= false;//set the letter is not present
break; //it will
brak out of the loop
}
}
//set result based on whether ll letter is found or
not
if(isLetterPresent){
result = "String contains all 26
letters";
}else{
result = "String does not contain
all 26 letters";
}
return result;
}
}
======================================
OUTPUT
======================================