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:
Here is the completed code for this problem. Comments are included, go through it, learn how things work and let me know if you have any doubts or if you need anything to change. If you are satisfied with the solution, please rate the answer. Thanks
// CheckLetters.java
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
public class CheckLetters extends Application {
//declaring important UI components
TextField input;
Label output;
@Override
public void start(Stage primaryStage) {
//initializing all UI components
Label lbl1 = new Label("Enter String: ");
input = new TextField();
//setting pref width of input text field to maximum so that the text field
//will be stretched according to screen size
input.setPrefWidth(Double.MAX_VALUE);
output = new Label("");
Button check = new Button("Check");
//enabling check button to call the check method (defined below) upon click
check.setOnAction(e -> check());
//creating a GridPane, adjusting padding & spacing
GridPane root = new GridPane();
root.setPadding(new Insets(20));
root.setVgap(20);
root.setHgap(20);
//adding all components to pane
root.add(lbl1, 0, 0); //lbl1 to column 0, row 0
root.add(input, 1, 0, 2, 1); //input to col 1, row 0, column span 2, row span 1
root.add(output, 0, 1, 2, 1);
root.add(check, 0, 2);
//setting up & displaying a scene
Scene scene = new Scene(root, 600, 200);
primaryStage.setScene(scene);
primaryStage.setTitle("Check Letters");
primaryStage.show();
}
//handler method
private void check() {
//getting text, converting to lower case
String text = input.getText().toLowerCase();
//initially assuming text contain all 26 letters
boolean allLettersFound = true;
//looping from a to z
for (char c = 'a'; c <= 'z'; c++) {
//if text does not contain c, setting allLettersFound to false
if (!text.contains("" + c)) {
allLettersFound = false;
break;
}
}
//at the end, displaying the result based on the value of allLettersFound
if (allLettersFound) {
output.setText("String contains all 26 letters");
} else {
output.setText("String does not contain all 26 letters");
}
}
public static void main(String[] args) {
launch(args);
}
}
/*OUTPUT*/