JavaFX Need Increments and Decrements to Show in Column

Viewed 53

Was wondering if anyone could help me with this issue. Here is the issue: I need numbers to be shown in columns whenever I click Inc or Dec like this:

1
2
3 
4 
3 
2 
1

And when I press the Reset menu item, I need it to reset it to zero. I used the counter method, but I don't know if this is the correct way to do it.

import javafx.application.Application;
import javafx.event.*;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.control.Alert.*;
import javafx.scene.layout.*;
import javafx.stage.*;
import javafx.stage.FileChooser.*;
import javafx.geometry.*;
import java.util.*;
import java.io.*;
import javafx.scene.text.*;

public class StudentViewer4 extends Application implements EventHandler<ActionEvent> {
    private Stage stage;        
    private Scene scene;       

    private VBox root = null;

    private MenuBar mbarBar = new MenuBar();

    private Menu mnuSystem = new Menu("Count");
    private MenuItem miInc = new MenuItem("Inc");
    private MenuItem miDec = new MenuItem("Dec");
    private MenuItem miReset = new MenuItem("Reset");
    private MenuItem miExit = new MenuItem("Exit");

    private TextArea taData = new TextArea("0");
   
    int counter = 0;

    public static void main(String[] args) {
        launch(args);
    }
   
    public void start(Stage _stage) throws Exception {
        stage = _stage;                        
        stage.setTitle("Menu Exercise");       

        mnuSystem.getItems().addAll(miInc, miDec, miReset, miExit);
        mbarBar.getMenus().addAll(mnuSystem);

        miInc.setOnAction(this);
        miDec.setOnAction(this);
        miReset.setOnAction(this);
        miExit.setOnAction(this);

        root = new VBox(mbarBar);

        taData.setPrefHeight(400);
        root.getChildren().add(taData);
    
        scene = new Scene(root, 375, 175);     
                                             
        stage.setScene(scene);                  
        stage.show();                        
    }

    public void handle(ActionEvent evt) {
        String sourceText = "";
        if (evt.getSource() instanceof Button) {
            Button btn = (Button) evt.getSource();
            sourceText = btn.getText();
        } else if (evt.getSource() instanceof MenuItem) {
            MenuItem mi = (MenuItem) evt.getSource();
            sourceText = mi.getText();
        } else 
            return;

        switch (sourceText) {
            case "Inc":
                counter++;
                taData.setText("" + counter);
                break;
            case "Dec":
                counter--;
                taData.setText("" + counter);
                break;
            case "Reset":
                taData.setText("0");
                counter = 0;
                break;
            case "Exit":
                System.exit(0);
                break;
        }
    }
}
1 Answers

Not sure if I understand the question correctly. But if you are asking about how to display all your inc/dec horizontally, you can do by appending the text.

public void handle(ActionEvent evt) {
    String sourceText = "";
    if (evt.getSource() instanceof Button) {
        Button btn = (Button) evt.getSource();
        sourceText = btn.getText();
    } else if (evt.getSource() instanceof MenuItem) {
        MenuItem mi = (MenuItem) evt.getSource();
        sourceText = mi.getText();
    } else {
        return;
    }
    switch (sourceText) {
        case "Inc":
            counter++;
            taData.setText(taData.getText()+" " + counter);
            break;
        case "Dec":
            counter--;
            taData.setText(taData.getText()+" " + counter);
            break;
        case "Reset":
            taData.setText("0");
            counter = 0;
            break;
        case "Exit":
            System.exit(0);
            break;
    }
}
Related