Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

Java Build a JavaFX Application Build a Pomodoro App Properties and Bindings

The 00:00 doesnt shows why ??

package com.teamtreehouse.pomodoro.controllers;

import com.teamtreehouse.pomodoro.model.Attempt;
import com.teamtreehouse.pomodoro.model.AttemptKind;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;

    /**
     * Created by arazg on 2017-03-10.
     */
    public class Home {

        @FXML
        private VBox container;

        @FXML
        private Label title;

        private Attempt mCurrentAttempt;
        private StringProperty mTimerText;

        public Home(){
            mTimerText = new SimpleStringProperty();
            setmTimerText(0);
        }

        public String getmTimerText() {

            return mTimerText.get();
        }

        public StringProperty mTimerTextProperty()
        {
            return mTimerText;
        }

        public void setmTimerText(String TimerText) {

            mTimerText.set(TimerText);
        }

        public void setmTimerText(int remainingSeconds){
         int minutes = remainingSeconds / 60;
         int seconds = remainingSeconds % 60;
         setmTimerText(String.format("%02d:%02d", minutes, seconds));
        }

        private void prepareAttempt(AttemptKind kind){
            clearAttemptStyle();
            mCurrentAttempt = new Attempt(kind,"" );
            addAttemptStyle(kind);
            title.setText(kind.getDisplayName());
            setmTimerText(mCurrentAttempt.getRemainingSeconds());
        }

        private void addAttemptStyle(AttemptKind kind) {
            container.getStyleClass().add(kind.toString().toLowerCase());
        }

        private void clearAttemptStyle() {
            for (AttemptKind kind : AttemptKind.values()) {
                container.getStyleClass().remove(kind.toString().toLowerCase());
            }
        }
        public void DEBUG(ActionEvent actionEvent){
            System.out.println("HI MOM");

        }
    }
fx.xml
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.shape.SVGPath?>
<VBox stylesheets="/css/main.css"
      xmlns="http://javafx.com/javafx/8"
      xmlns:fx="http://javafx.com/fxml"
      fx:controller="com.teamtreehouse.pomodoro.controllers.Home"
      fx:id="container">
    <children>
        <Button fx:id="DEBUG" onAction ="#DEBUG">DEBUG</Button>
        <Label fx:id="title" text="Pomodoro"/>

        <Label fx:id="time" text="${controller.mTimerText}"/>

        <HBox styleClass="buttons">
            <children>
                <StackPane>
                    <children>
                        <StackPane styleClass="nested-action,play">
                            <children>
                                <HBox styleClass="svg-container">
                                    <SVGPath styleClass="svg"
                                             content="M1.6 17C1 17 0 16.2 0 15.6V1.3C0 .1 2.2-.4 3.1.4l8.2 6.4c.5.4.8 1 .8 1.7 0 .6-.3 1.2-.8 1.7l-8.2 6.4c-.5.2-1 .4-1.5.4z"/>
                                </HBox>
                                <Button text="Resume"/>
                            </children>
                        </StackPane>

                        <StackPane styleClass="nested-action,pause">
                            <children>
                                <HBox styleClass="svg-container">
                                    <SVGPath styleClass="svg"
                                             content="M10.2 17c-1 0-1.8-.8-1.8-1.8V1.8c0-1 .8-1.8 1.8-1.8S12 .8 12 1.8v13.4c0 1-.8 1.8-1.8 1.8z" />
                                    <SVGPath styleClass="svg"
                                             content="M10.2 17c-1 0-1.8-.8-1.8-1.8V1.8c0-1 .8-1.8 1.8-1.8S12 .8 12 1.8v13.4c0 1-.8 1.8-1.8 1.8z" />
                                </HBox>
                                <Button text="Pause"/>
                            </children>
                        </StackPane>
                    </children>
                </StackPane>

                <StackPane styleClass="nested-action,restart">
                    <children>
                        <HBox styleClass="svg-container">
                            <SVGPath styleClass="svg"
                                     content="M21 2.9C19.1 1 16.6 0 13.9 0c-1.1 0-2 .9-2 1.9s.9 1.9 2 1.9c1.7 0 3.2.6 4.4 1.8 2.4 2.4 2.4 6.3 0 8.7-1.2 1.2-2.7 1.8-4.4 1.8-1.7 0-3.2-.6-4.4-1.8-1.8-1.8-2.3-4.4-1.4-6.7L9.3 10c.2.4.5.7.9.8.4.1.8.1 1.2-.1.8-.4 1.1-1.3.8-2.1L10 4.3c0-.5-.2-1-.6-1.4l-.1-.1-.1-.2c-.2-.4-.5-.7-.9-.8-.4-.1-.8-.1-1.2.1L.9 4.8C.1 5.2-.2 6.1.2 6.9c.2.4.5.7.9.8.4.1.8.1 1.2-.1l2-.9c-1.2 3.5-.4 7.6 2.4 10.4C8.6 19 11.2 20 13.9 20s5.3-1 7.2-2.9C25 13.2 25 6.8 21 2.9z"/>
                        </HBox>
                        <Button text="Restart"/>
                    </children>
                </StackPane>
            </children>
        </HBox>

        <TextArea fx:id="message" promptText="What are you doing?"/>

        <ImageView>
            <image>
                <Image url="/images/pomodoro.png"/>
            </image>
        </ImageView>

    </children>
</VBox>

[MOD: edited code blocks - srh]

1 Answer

Michael Macdonald
Michael Macdonald
34,265 Points

Not sure if you already found the solution to your problem...but I did spot a few differences in your code:

  1. ) setmTimerText(0);, should be setTimerText(0);

2.) public String getmTimerText(), should be getTimerText()

3.) public StringProperty mTimerTextProperty(), should be timerTextProperty()

4.) public void setmTimerText(String TimerText), should be setTimerText(String TimerText)

5.) public void setmTimerText(int remainingSeconds), should be setTimerText(int remainingSeconds)

6.) setmTimerText(String.format("%02d:%02d", minutes, seconds));, should be setTimerText(String.format("%02d:%02d", minutes, seconds));

7.) setmTimerText(mCurrentAttempt.getRemainingSeconds());, should be setTimerText(mCurrentAttempt.getRemainingSeconds());

8.) <Label fx:id="time" text="${controller.mTimerText}"/>, should be <Label fx:id="time" text="${controller.timerText}"/>

It appears that when you created the "getters & setters", they added an 'm' in front of 'TimerText'. As well as adding it in a couple of other places. My best guess is it has something to do with your default settings for code generation. I would check the settings. Hope this helps ~~