Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Expand
titleDel 4 - JavaFX og FXML (6 poeng)

Du skal lage en liten JavaFX-app for å teste DiceScorer-implementasjonene dine, altså SingleValue-, Straight- og Nothing-klassene. Følgende oppførsel skal støttes:

  • Brukeren skal kunne fylle inn et sett terningverdier i et tekstfelt (TextField). Mellomrom brukes som skilletegn.
  • For hver DiceScorer-implementasjon er det en knapp og når den trykkes, kjøres getScore-metoden til en tilsvarende DiceScorer-instans, med de angitt terningverdiene som argument.
  • Innholdet i DiceScorer-objektet som returneres, skal vises som tekst (Label). Hvis null returneres skal begge tekstene settes til en tom String.

Illustrasjonen for oppgaven viser resultatet etter at knappen tilsvarende Straight er trykket.

Følgende FXML er skrevet for appen:

Code Block
<VBoxxmlns:fx="http://javafx.com/fxml/1"
    fx:controller="kont2018.farkle.fx.DiceScorerController">
    <HBox>
        <Labeltext="Die values: "/>
        <!--  text field for inputing the die values -->
        <TextFieldfx:id="dieValuesInput"/>
    </HBox>
    <HBox>
        <ButtononAction="#testSingleValue" text="Test SingleValue"/>
        <ButtononAction="#testStraight" text="Test Straight"/>
        <ButtononAction="#testNothing" text="Test Nothing"/>
    </HBox>
    <HBox>
        <Labeltext="Points: "/>
        <!--  label for outputing the score -->
        <Labelfx:id="scoreOutput" text=""/>
    </HBox>
    <HBox>
        <Labeltext="For values: "/>
        <!--  label for outputing the scoring die values -->
        <Labelfx:id="diceOutput" text=""/>
    </HBox>
</VBox>

Skriv en JavaFX-kontroller som implementerer ønsket oppførsel, basert på kodeskjelettet nedenfor. Den skal passe til den oppgitte FXML-en og bruke klasser og metoder beskrevet tidligere i oppgavesettet. Du kan anta at Dice har en passende toString()-metode.

Code Block
public class DiceScorerController {
 
    private DiceScorer singleValue, straight, nothing;
 
    @FXML
    public void initialize() {
        ??? initialize DiceScorer instances
    }
 
    @FXML private TextField dieValuesInput;
    @FXML private Label scoreOutput;
    @FXML private Label diceOutput;
 
    // helper method for parsing die values input
    private Dice getDiceInput() {
        Collection<Integer> dieValues = new ArrayList<>();
        for (String dieValue : dieValuesInput.getText().split(" ")) {
            ??? parse and add die value
        }
        ??? return new Dice instances
    }
 
    // helper method for 
    private void runDiceScorer(DiceScorer scorer) {
        ??? get DiceScore object by calling scorer's getScore method
        if (score != null) {
            ??? show output
        } else {
            ??? show output
        }
    }
 
    @FXML
    public void testSingleValue() {
        ??? use SingleValue implementation
    }
 
    @FXML
    public void testStraight() {
        ??? use Straight implementation
    }
 
    @FXML
    public void testNothing() {
        ??? use Nothing implementation
    }
}

Hvis det er detaljer du er usikker på, så forklar med tekstkommentarer i koden.

Expand
titleLF

 

 

Code Block
public class DiceController {
 
   @FXML
   private TextField dieCountInput;
 
   @FXML
   private Label diceOutput;
 
   @FXML
   public void handleThrowDice() {
      Dice dice = new Dice(Integer.valueOf(dieCountInput.getText()));
      computeFarkleScore(dice); // var jo oppgitt
      diceOutput.setText(dice.toString());
   }
}