我正在编写一个代码,允许用户输入折扣代码,该代码将应用于价格,这将扣除 10% 的小计。
我想做的是不要在 GUI 上显示折扣代码和金额,除非已应用折扣代码(会弹出一个窗口,完成后可以关闭并且信息就在那里) .
到目前为止,有效的是折扣金额。因此,打开程序时并不明显,当折扣代码匹配并应用时,折扣金额就在那里。
然而,这就是我遇到麻烦的地方。我正在尝试使用折扣代码做同样的事情。例如,如果您输入“SALE10”作为代码,则 GUI 将显示已输入且有效的代码以及已从小计中扣除的金额。
我试图通过使用 FXML 上的 setVisible 布尔值和可见性标签来做到这一点。
discountCode.setVisible(true);
discountAmount.setVisible(true);
我在函数中有这些,但
discountCode.setVisible(true);
下面有一条红线,给出的错误是无法解析“String”中的方法“setVisible”,我不确定这意味着什么。我更困惑的是,discountAmount 有效,但 discountCode 无效
这是它的完整功能
public void applyDiscount(String discountCode){
if("SALE10".equals(discountCode)){
BigDecimal preDiscount = new BigDecimal(subtotalSum.getText().substring(1));
BigDecimal discountAmountValue = preDiscount.multiply(new BigDecimal("0.10"));
BigDecimal newSubtotal = preDiscount.subtract(discountAmountValue);
subtotalSum.setText("$" + newSubtotal.setScale(2, RoundingMode.HALF_UP));
BigDecimal taxRate = new BigDecimal("0.12");
BigDecimal newTotalPrice = newSubtotal.multiply(BigDecimal.ONE.add(taxRate));
totalPrice.setText("$" + newTotalPrice.setScale(2, RoundingMode.HALF_UP));
discountAmount.setText("-$" + discountAmountValue.setScale(2, RoundingMode.HALF_UP));
discountCode.setVisible(true);
discountAmount.setVisible(true);
} else {
discountCode.setVisible(false);
discountAmount.setVisible(false);
//will keep the text hidden if code is invalid
}
}
这是包含这些文本的 FXML 部分
<Text fx:id="discountCode" layoutX="110.0" layoutY="223.0" strokeType="OUTSIDE" strokeWidth="0.0" text="-$9.99" wrappingWidth="58.5" visible="false"/>
<Text fx:id="discountAmount" layoutX="110.0" layoutY="223.0" strokeType="OUTSIDE" strokeWidth="0.0" text="-$9.99" wrappingWidth="58.5" visible="false"/>
您的班级可能有字段
discountAmount
和 discountCode
。
在您的方法中,您有一个也名为
discountCode
的参数,并且该参数隐藏了该字段(即您无法再仅通过名称 discountCode
访问该字段)。
您可以重命名参数或通过在名称前添加
this.
: 来访问该字段
public void applyDiscount(String discountCode){
if("SALE10".equals(discountCode)){
BigDecimal preDiscount = new BigDecimal(subtotalSum.getText().substring(1));
BigDecimal discountAmountValue = preDiscount.multiply(new BigDecimal("0.10"));
BigDecimal newSubtotal = preDiscount.subtract(discountAmountValue);
subtotalSum.setText("$" + newSubtotal.setScale(2, RoundingMode.HALF_UP));
BigDecimal taxRate = new BigDecimal("0.12");
BigDecimal newTotalPrice = newSubtotal.multiply(BigDecimal.ONE.add(taxRate));
totalPrice.setText("$" + newTotalPrice.setScale(2, RoundingMode.HALF_UP));
discountAmount.setText("-$" + discountAmountValue.setScale(2, RoundingMode.HALF_UP));
this.discountCode.setVisible(true); // change here
discountAmount.setVisible(true);
} else {
this.discountCode.setVisible(false); // change here
discountAmount.setVisible(false);
//will keep the text hidden if code is invalid
}
}