簡體   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