[英]radio button to enable text area
我對Java還是很陌生,並且一直想弄清楚如果暫時選擇了單選按鈕,如何啟用文本區域進行編輯。 我一直在谷歌上搜索和閱讀各種論壇上的帖子,但是我不了解他們在做什么或者如何在我的程序中做到這一點。
這是我到目前為止的內容:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package labscheduler;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.application.*;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
*
* @author S02105032
*/
public class FXMLLabSchedulerDocController implements Initializable {
@FXML
private TextField txtRequestorName;
@FXML
private TextField txtRequestorEmail;
@FXML
private TextField txtEventTitle;
@FXML
private TextField txtNumParticipants;
@FXML
private TextField txtEventDate;
@FXML
private TextField txtStartTime;
@FXML
private TextField txtEndTime;
@FXML
private ToggleButton togStartTime;
@FXML
private ToggleButton togEndTime;
@FXML
private CheckBox chkPrinter;
@FXML
private RadioButton rbYes;
@FXML
private RadioButton rbNo;
@FXML
private TextArea txtareaMessage;
private String requestorName;
private String requestorEmail;
private String eventTitle;
private int participants = 0;
private Date eventDate;
private Date startTime;
private Date endTime;
private String printer;
private String message;
@FXML
private void handleBtnSubmit(ActionEvent event) {
requestorName = txtRequestorName.getText();
requestorEmail = txtRequestorEmail.getText();
eventTitle = txtEventTitle.getText();
participants = Integer.parseInt(txtNumParticipants.getText());
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/YY");
try {
eventDate = sdf.parse(txtEventDate.getText());
} catch (ParseException ex) {
System.out.println("invalid date format");
}
SimpleDateFormat stdf = new SimpleDateFormat("hh:mm");
try {
startTime = stdf.parse(txtStartTime.getText());
} catch (ParseException ex) {
System.out.println("invalid start time format");
}
SimpleDateFormat etdf = new SimpleDateFormat("hh:mm");
try {
endTime = etdf.parse(txtEndTime.getText());
} catch (ParseException ex) {
System.out.println("invalid end time format");
}
if(chkPrinter.isSelected()) {
printer = "printer requested";
}
else {
printer = "no printer needed";
}
if(rbYes.isSelected() && !rbNo.isSelected()) {
txtareaMessage.setEditable(true);
message = txtareaMessage.getText();
}
else {
txtareaMessage.setEditable(false);
message = "None";
}
}
@FXML
private void handleButtonClose(ActionEvent event) {
System.out.println("Application Close!");
Platform.exit();
}
@FXML
private void handleButtonClear(ActionEvent e) {
System.out.println("Clear All Fields!");
txtRequestorName.setText("");
txtRequestorEmail.setText("");
txtEventTitle.setText("");
txtNumParticipants.setText("");
txtEventDate.setText("");
txtStartTime.setText("");
txtEndTime.setText("");
chkPrinter.setSelected(false);
rbYes.setSelected(false);
rbNo.setSelected(false);
txtareaMessage.setText("");
}
// Radio Buttons need to be set to group so only one can be selected at a time
// If Radio Btn Yes is checked, enable txt area message, else disable
// Set Toggle Buttons to toggle between AM & PM
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
}
}
當我選擇其中一個單選按鈕時,似乎無法使文本區域可編輯。
JavaFX控件的狀態由可觀察的屬性表示。 因此, RadioButton
具有selectedProperty
,而TextArea
具有editableProperty
。 您可以使用通常的set / get(或set / is)方法設置和檢索這些值: txtareaMessage.setEditable(rbYes.isSelected())
,也可以觀察它們的變化:
rbYes.selectedProperty().addListener(...);
或者您可以將一個屬性的值綁定到另一個屬性的值。 綁定本質上只是為一個屬性注冊一個偵聽器,並在觀察到的屬性更改時更新另一個屬性。
在您的情況下,邏輯非常簡單(文本區域的editable屬性的值應與單選按鈕的selected屬性的值相同),因此您所需要做的就是在initialize()
方法中建立一個簡單的綁定:
txtareaMessage.editableProperty().bind(rbYes.selectedProperty());
if(rbYes.isSelected() && !rbNo.isSelected()) {
txtareaMessage.setEditable(true);
message = txtareaMessage.getText();
}
else {
txtareaMessage.setEditable(false);
message = "None";
}
該段代碼位於按鈕( handleBtnSubmit
)的ActionListener
中,因此,據我了解,您需要在單選按鈕上使用ActionListener
來觸發上述代碼。
像這樣創建一個ToggleGroup。
final ToggleGroup group = new ToggleGroup();
將單選按鈕添加到“組”。
RadioButton yes = new RadioButton("yes"); yes.setToggleGroup(group); RadioButton no= new RadioButton("no"); no.setToggleGroup(group);
檢查是否選擇了“是”單選按鈕。
yes.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent actionEvent) { if(yes.isSelected()){ textField.setEnabled(true); }else{ textField.setEnabled(false); } } });
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.