Set up a JavaFX GUI-based program that shows a 10 times 10 grid of labels that f
ID: 3937018 • Letter: S
Question
Set up a JavaFX GUI-based program that shows a 10 times 10 grid of labels that forms a multiplication table, with the labels displaying the multiplication problems, rather than the answers. Provide a text input field and a button with an event handler that reads an integer value from the text input and changes the CSS styling in some obvious way for all problems in the table with the given answer. When a new answer is entered and the button is clicked, change all the labels back to the original style, then change the labels showing problems for the new answer to the new style. Use CSS, not setters, for all the styling. The main point of this lab is to learn JavaFX, so the grading will include a heavy emphasis on the neatness and general appearance of your GUI.Explanation / Answer
Code:
//multiTable.java
// import required packages
import java.util.List;
import javafx.application.Application;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
// class for revrse multiplication table
public class multiTable extends Application
{
// over ride nethod for setup the grid
@Override
public void start(Stage primaryStage)
{
BorderPane pane1 = new BorderPane();
pane1.setTop(getHbox1());
HBox h_box = new HBox(15);
h_box.setPadding(new Insets(15, 15, 15, 15));
h_box.setAlignment(Pos.TOP_CENTER);
h_box.getStyleClass().add("hbox2");
Label labl = new Label("Enter Answer: ");
h_box.getChildren().add(labl);
TextField textfield1 = new TextField();
h_box.getChildren().add(textfield1);
GridPane grid_pane1 = setUpGrid();
gridmaker griddp = new gridmaker(grid_pane1);
Button Answer = new Button("Find problems");
Answer.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<Event>()
{
@Override
public void handle(Event arg0)
{
List<int[]> fact = factors(textfield1);
for (int[] RCx1 : fact) {
Node node = griddp.get_chldren()[RCx1[0]][RCx1[1]];
node.setStyle("-fx-background-color: green");
}
}
});
h_box.getChildren().add(Answer);
pane1.setCenter(h_box);
pane1.setBottom(grid_pane1);
Scene scene = new Scene(pane1, 550, 650);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setTitle("lab 6");
primaryStage.setScene(scene);
primaryStage.show();
}
// method for grid layout
private HBox getHbox1()
{
HBox hbox2 = new HBox(15);
hbox2.setPadding(new Insets(15, 15, 15, 15));
hbox2.setAlignment(Pos.TOP_CENTER);
hbox2.getStyleClass().add("hbox1");
Label labl = new Label("Multiplication Table");
hbox2.getChildren().add(labl);
return hbox2;
}
// method to setup a grid
public GridPane setUpGrid() {
GridPane pane1 = new GridPane();
Label[][] labels2 = new Label[11][11];
for (int nrow = 0; nrow < 11; nrow++) {
for (int ncol = 0; ncol < 11; ncol++) {
Label labl1 = new Label();
setUpLabel(labl1, ncol, nrow);
labels2[nrow][ncol] = labl1;
pane1.add(labl1, ncol, nrow);
}
}
return pane1;
}
// method to setup label
public void setUpLabel(final Label labl1, final int ncol, final int nrow)
{
labl1.setPrefHeight(50);
labl1.setPrefWidth(50);
labl1.setAlignment(Pos.CENTER);
labl1.setStyle("-fx-stroke-border: black; -fx-border-width: 1;");
String na = String.valueOf(nrow);
String nb = String.valueOf(ncol);
if (nrow == 0 || ncol == 0) {
labl1.getStyleClass().add("gridBorders");
if (nrow == 0) {
labl1.setText(nb);
} else if (ncol == 0) {
labl1.setText(na);
}
} else {
labl1.setText(na + " * " + nb);
labl1.getStyleClass().add("gridInside");
}
}
// method to setup display factor
public List<int[]> factors(TextField pblm)
{
FactorCalc calcul = new FactorCalc();
int numb = Integer.parseInt(pblm.getText());
System.out.println(numb);
List<int[]> factors = calcul.FactFind(numb, 10);
System.out.println(factors);
return factors;
}
// main method
public static void main(String[] args) {
launch(args);
}
}
//gridmaker.java
// import required packages
import javafx.scene.Node;
import javafx.scene.layout.GridPane;
// class gridmaker
public class gridmaker
{
// pane object
GridPane grid_pane1;
//constructor
public gridmaker(GridPane grid_pane1)
{
this.grid_pane1 = grid_pane1;
}
// grid size
private int getSize()
{
return grid_pane1.getChildren().size();
}
// method to get column size
public int getColSize()
{
int No_rows = grid_pane1.getRowConstraints().size();
for (int coli = 0; coli < grid_pane1.getChildren().size(); coli++)
{
Node chld = grid_pane1.getChildren().get(coli);
if (chld.isManaged())
{
int Col_index = GridPane.getColumnIndex(chld);
int columnEnd = GridPane.getColumnIndex(chld);
No_rows = Math.max(No_rows, (columnEnd != GridPane.REMAINING ? columnEnd : Col_index) + 1);
}
}
return No_rows;
}
// method to get row size
public int getSizeRow()
{
int No_rows = grid_pane1.getRowConstraints().size();
for (int coli = 0; coli < grid_pane1.getChildren().size(); coli++) {
Node chld = grid_pane1.getChildren().get(coli);
if (chld.isManaged()) {
int Row_index = GridPane.getRowIndex(chld);
int Row_End = GridPane.getRowIndex(chld);
No_rows = Math.max(No_rows, (Row_End != GridPane.REMAINING ? Row_End : Row_index) + 1);
}
}
return No_rows;
}
// mehtod to ge column childs
public Node[] getChildColoumn(int Col_no) {
if (Col_no < getSizeRow())
{
return get_chldren()[Col_no];
}
return null;
}
// mehtod to get row childs
public Node[] get_child_row(int RCrowNo)
{
Node sz[] = new Node[getSizeRow()];
if (RCrowNo <= getSizeRow())
{
for (int coli = 0; coli < getSizeRow(); coli++)
{
sz[coli] = getChildColoumn(coli)[RCrowNo];
}
return sz;
}
return null;
}
// mehtod to get child row
public Node[] get_child_row_vise()
{
Node sz[] = new Node[getSize()];
int ncol = getColSize();
int Incr = 0;
for (int coli = 0; coli < ncol; coli++)
{
for (Node sz1 : get_child_row(coli))
{
if (sz1 != null)
{
sz[Incr] = sz1;
Incr++;
}
}
}
return sz;
}
// method to get the childs
public Node[][] get_chldren() {
Node[][] RCnodes = new Node[getSizeRow()][getColSize()];
for (Node RCnode : grid_pane1.getChildren()) {
int nrow = grid_pane1.getRowIndex(RCnode);
int RCcolumn = grid_pane1.getColumnIndex(RCnode);
RCnodes[nrow][RCcolumn] = RCnode;
}
return RCnodes;
}
// method to get the position
public Integer RCpostion(Node RCnode, Pos RCpos) {
if (RCnode != null) {
switch (RCpos) {
case RCRow:
return grid_pane1.getRowIndex(RCnode);
case RCColumn:
return grid_pane1.getColumnIndex(RCnode);
}
}
return null;
}
//enumerator
enum Pos
{
RCRow,
RCColumn;
}
}
//FactorCalc.java
// import required packages
import java.util.ArrayList;
import java.util.List;
// class to compute factor
class FactorCalc
{
public List<Integer> valLst = new ArrayList<Integer>();
private int valproblem = 0;
// mehtod for finding the facts
public List<int[]> FactFind(int valproblem, int limit)
{
int incval = 1;
this.valproblem = valproblem;
while (incval <= limit)
{
if (valproblem % incval == 0)
{
valLst.add(incval);
}
incval++;
}
return funcCombi();
}
// method for functional computation
public List<int[]> funcCombi()
{
List<int[]> ValArys = new ArrayList<>();
for (int lp = 0; lp < valLst.size(); lp++)
{
for (int j = 0; j < valLst.size(); j++) {
if (valLst.get(lp) * valLst.get(j) == valproblem)
{
int[] inx = new int[2];
inx[0] = valLst.get(lp);
inx[1] = valLst.get(j);
ValArys.add(inx);
}
}
}
return ValArys;
}
}
//application.css
.hbox1 {
-fx-background-color: gray;
}
.hbox2 {
-fx-background-color: white;
}
.gridBorders {
-fx-background-color: red;
-fx-text-fill:#A3FF47;
-fx-border-style: solid;
-fx-border-width: 1;
-fx-stroke-border: black;
}
.gridInside {
-fx-background-color: gray;
-fx-text-fill: white;
-fx-border-style: solid;
-fx-border-width: 1;
-fx-stroke-border: black;
}
.gridAnswer {
-fx-background-color: white;
-fx-text-fill: black;
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.