繁体   English   中英

单选按钮以启用文本区域

[英]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来触发上述代码。

  1. 像这样创建一个ToggleGroup。

     final ToggleGroup group = new ToggleGroup(); 
  2. 将单选按钮添加到“组”。

     RadioButton yes = new RadioButton("yes"); yes.setToggleGroup(group); RadioButton no= new RadioButton("no"); no.setToggleGroup(group); 
  3. 检查是否选择了“是”单选按钮。

      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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM