2014-10-04 79 views
0

我对Java仍然很陌生,并且一直在试图弄清楚如果现在选中一个单选按钮,如何启用文本区域进行编辑。我一直在各种论坛上使用Google和阅读帖子,但是我不明白他们在做什么或如何在我的程序中做到这一点。单选按钮启用文本区域

这是我到目前为止有:

/* 
* 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 
    }  

} 

当我选择的单选按钮,它似乎并没有被使文本区域进行编辑。

+2

请删除不相关的方法和字段以减少无用的代码量。另外,确切地说哪种方法已经分配给哪个组件,不可能仅仅通过查看来告诉它(你也可以显示相关的FXML代码)。 – Dici 2014-10-04 08:12:28

回答

1

的JavaFX的国家控制由observable properties表示。所以RadioButton有一个selectedPropertyTextArea有一个editableProperty。您可以设置与通常的集中检索这些值/获取(或设置/是)方法:txtareaMessage.setEditable(rbYes.isSelected()),你还可以观察他们的变化:

rbYes.selectedProperty().addListener(...); 

,或者你可以在一个属性的值绑定另一个的价值。绑定本质上只是将一个监听器注册到一个属性,并在观察属性更改时更新其他属性。

在您的情况下,逻辑非常简单(文本区域的可编辑属性的值应该与单选按钮的选定属性的值相同),因此您只需要在initialize()方法中建立一个简单的绑定:

txtareaMessage.editableProperty().bind(rbYes.selectedProperty()); 
0
if(rbYes.isSelected() && !rbNo.isSelected()) { 
     txtareaMessage.setEditable(true); 
     message = txtareaMessage.getText(); 
    } 
    else { 
     txtareaMessage.setEditable(false); 
     message = "None"; 
    } 


这的代码段是ActionListener您的按钮(handleBtnSubmit)内,因此,从我的理解,你需要在你的单选按钮的ActionListener解雇上述代码。

0
  1. 创建一个像这样的切换组。

    final ToggleGroup group = new ToggleGroup(); 
    
  2. 将Radiobutton添加到“组”中。

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

    yes.setOnAction(new EventHandler<ActionEvent>() { 
    @Override 
    public void handle(ActionEvent actionEvent) { 
        if(yes.isSelected()){ 
          textField.setEnabled(true); 
    
        }else{ 
          textField.setEnabled(false); 
        } 
        } 
    }); 
    
相关问题