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 |
---|
| 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());
}
}
|
|
|