Set up a JavaFX GUIbased program that shows a 10 times 10 gr

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.

Solution

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;

}

 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 prob
 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 prob
 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 prob
 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 prob
 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 prob
 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 prob

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site