[英]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.