我试图使用TDD构建一个简单的计算器,所以我有一个右对齐的TextArea来显示结果和20个按钮。每次按下其中一个数字按钮,它只是将数字附加到TextArea,当我按下点按钮时应该发生同样的事情。但是它将点作为TextArea中的第一个字符,只有当我按下一个新数字时,点才会到达正确的位置。
因此,例如,如果我按9然后按8,TextArea显示" 98",现在如果按下该点,结果将是" .98",最后如果7是按下结果是" 98.7"。
按下点按钮时的预期结果应该是" 98。"。
我在下面创建了一个Minimal,Complete和Verifiable示例
FXMLDocument.fxml:
<AnchorPane id="AnchorPane" prefHeight="175.0" prefWidth="256.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.141" fx:controller="mcv.FXMLDocumentController">
<children>
<Button fx:id="buttonNine" layoutX="14.0" layoutY="100.0" onAction="#handleButtonNine" prefHeight="60.0" prefWidth="69.0" text="9">
<font>
<Font size="24.0" />
</font></Button>
<TextArea fx:id="textArea" editable="false" focusTraversable="false" layoutX="15.0" layoutY="14.0" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" nodeOrientation="RIGHT_TO_LEFT" prefHeight="66.0" prefWidth="221.0" wrapText="true">
<font>
<Font size="35.0" />
</font>
</TextArea>
<Button fx:id="buttonDot" layoutX="169.0" layoutY="100.0" mnemonicParsing="false" onAction="#handleButtonDot" prefHeight="60.0" prefWidth="69.0" text=".">
<font>
<Font size="24.0" />
</font>
</Button>
</children>
</AnchorPane>
FXMLDocumentController.java:
@FXML
private TextArea textArea;
@Override
public void initialize(URL location, ResourceBundle resources) {
}
private void appenToResult(String ch){
textArea.appendText(ch);
}
@FXML
void handleButtonDot(ActionEvent event) {
appenToResult(".");
}
@FXML
void handleButtonNine(ActionEvent event) {
appenToResult("9");
}
正如您所看到的,代码非常简单。它应该工作,我唯一的线索是,当节点方向设置为RIGHT_TO_LEFT时,这是TextArea的错误。如果节点方向设置为INHERIT或LEFT_TO_RIGHT,则按预期工作。谢谢。