2016-07-13 30 views
1

我想从组合框中选择的项目,在事件发生后单击它显示的声明为txtActivity如何从Combobox Javafx中选择项目时将文本设置为TextField?

我停留在这一点上它的代码是不工作 需要帮助

一个TextField不同的文本

上午停留在这一点上

if(cmbComponent.getSelectionModel().getSelectedItem().equals("Ministry of Water")){ 
    txtActivity.setText("1.0.0"); 

} 

这是我的全部代码

package application; 

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.net.URL; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.ResourceBundle; 

import org.apache.poi.hssf.usermodel.HSSFCell; 
import org.apache.poi.hssf.usermodel.HSSFRow; 
import org.apache.poi.hssf.usermodel.HSSFSheet; 
import org.apache.poi.hssf.usermodel.HSSFWorkbook; 
import org.apache.poi.ss.usermodel.RichTextString; 
import org.apache.poi.xssf.usermodel.XSSFCell; 
import org.apache.poi.xssf.usermodel.XSSFRow; 
import org.apache.poi.xssf.usermodel.XSSFSheet; 
import org.apache.poi.xssf.usermodel.XSSFWorkbook; 

import javafx.beans.property.SimpleStringProperty; 
import javafx.beans.property.StringProperty; 
import javafx.collections.FXCollections; 
import javafx.collections.ObservableList; 
import javafx.event.ActionEvent; 
import javafx.fxml.FXML; 
import javafx.fxml.FXMLLoader; 
import javafx.fxml.Initializable; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.ComboBox; 
import javafx.scene.control.DatePicker; 
import javafx.scene.control.TableColumn; 
import javafx.scene.control.TableView; 
import javafx.scene.control.TextArea; 
import javafx.scene.control.TextField; 
import javafx.scene.control.cell.PropertyValueFactory; 
import javafx.stage.Stage; 

public class SafeguardTrackingToolController implements Initializable { 

    @FXML 
    private TextField txtActivity; 
    @FXML 
    private TextArea txtComments; 
    /*@FXML 
    private ComboBox<String> cmbComponent;*/ 

    @FXML 
    private ComboBox <Details> cmbComponent; 
    private ObservableList <Details> cmbComponentData = FXCollections.observableArrayList(); 

    @FXML 
    private TableColumn 
    tblComponent, 
    tblActivity, 
    tableColumnForTor, 
    tblContract, 
    tblfirst, 
    tblFinal, 
    tblBank, 
    tblDisclosure, 
    tblNema, 
    tblBudgetRe, 
    tblBudgetPro, 
    tblBegin, 
    tblComments; 

    @FXML 
    private TableView <Items> tableViewForExcel; 

    @FXML 
    private DatePicker 
    dateTor, 
    dateContract, 
    dateFirstDraft, 
    dateFinalDraft, 
    dateBank, 
    dateDisclosure, 
    dateNema, 
    dateBudget, 
    dateProvided, 
    dateImplementation; 

    @FXML 
    private Button btnAdd, btnReset, btnCreateAnotherSheet, btnExcel, btnDelete; 


    private final ObservableList <Items> data = FXCollections.observableArrayList(new Items(null, null, null, null, null, null, null, null, null, null, null, null, null)); 


    @Override 
    public void initialize(URL location, ResourceBundle resources) { 
     // TODO Auto-generated method stub 

     tblComponent.setCellValueFactory(new PropertyValueFactory("Component")); 
     tblActivity.setCellValueFactory(new PropertyValueFactory("Activity")); 
     tableColumnForTor.setCellValueFactory(new PropertyValueFactory("Torr")); 
     tblContract.setCellValueFactory(new PropertyValueFactory("Contract")); 
     tblfirst.setCellValueFactory(new PropertyValueFactory("FirstDraft")); 
     tblFinal.setCellValueFactory(new PropertyValueFactory("FinalDraft")); 
     tblBank.setCellValueFactory(new PropertyValueFactory("Bank")); 
     tblDisclosure.setCellValueFactory(new PropertyValueFactory("Disclosure")); 
     tblNema.setCellValueFactory(new PropertyValueFactory("Nema")); 
     tblBudgetRe.setCellValueFactory(new PropertyValueFactory("Budget")); 
     tblBudgetPro.setCellValueFactory(new PropertyValueFactory("Provided")); 
     tblBegin.setCellValueFactory(new PropertyValueFactory("Implementation")); 
     tblComments.setCellValueFactory(new PropertyValueFactory("Comment")); 


     cmbComponentData.add(new Details("Ministry of Water", "")); 
     cmbComponentData.add(new Details("Ministry of Lands", "")); 
     cmbComponentData.add(new Details("Ministry of Minerals", "")); 
     cmbComponentData.add(new Details("Ministry of ManKind", "")); 

     if (cmbComponent.getSelectionModel().getSelectedItem().equals("Ministry of Water")) { 
      txtActivity.setText("1.0.0"); 

     } 

     cmbComponent.setItems(cmbComponentData); 




     tableViewForExcel.getItems().setAll(this.data); 
     tableViewForExcel.setEditable(true); 
    } 


    public static class Items { 
     //the setters and getters should be of the same name with the simple string property 

     private final SimpleStringProperty Component; 
     private final SimpleStringProperty Activity; 
     private final SimpleStringProperty Torr; 
     private final SimpleStringProperty Contract; 
     private final SimpleStringProperty FirstDraft; 
     private final SimpleStringProperty FinalDraft; 
     private final SimpleStringProperty Bank; 
     private final SimpleStringProperty Disclosure; 
     private final SimpleStringProperty Nema; 
     private final SimpleStringProperty Budget; 
     private final SimpleStringProperty Provided; 
     private final SimpleStringProperty Implementation; 
     private final SimpleStringProperty Comment; 

     private Items(String Comp, String Act, 
      String Tor, String Co, 
      String FDraft, String FinalDra, 
      String Ban, String Dis, String Nem, 
      String Bud, String Pro, String Im, String Comm) { 



      this.Component = new SimpleStringProperty(Comp); 
      this.Activity = new SimpleStringProperty(Act); 
      this.Torr = new SimpleStringProperty(Tor); 
      this.Contract = new SimpleStringProperty(Co); 
      this.FirstDraft = new SimpleStringProperty(FDraft); 
      this.FinalDraft = new SimpleStringProperty(FinalDra); 
      this.Bank = new SimpleStringProperty(Ban); 
      this.Disclosure = new SimpleStringProperty(Dis); 
      this.Nema = new SimpleStringProperty(Nem); 
      this.Budget = new SimpleStringProperty(Bud); 
      this.Provided = new SimpleStringProperty(Pro); 
      this.Implementation = new SimpleStringProperty(Im); 
      this.Comment = new SimpleStringProperty(Comm); 

     } 

     public String getComponent() { 
      return Component.get(); 
     } 

     public void setComponent(String Comp) { 
      Component.set(Comp); 
     } 


     public String getActivity() { 
      return Activity.get(); 
     } 

     public void setAcivity(String Act) { 
      Activity.set(Act); 
     } 


     public String getTorr() { 
      return Torr.get(); 
     } 

     public void setTorr(String Tor) { 
      Torr.set(Tor); 
     } 


     public String getContract() { 
      return Contract.get(); 
     } 

     public void setContract(String Co) { 
      Contract.set(Co); 
     } 


     public String getFirstDraft() { 
      return FirstDraft.get(); 
     } 

     public void setFirstDraft(String FDraft) { 
      FirstDraft.set(FDraft); 
     } 


     public String getFinalDraft() { 
      return FinalDraft.get(); 
     } 

     public void setFinalDraft(String FinalDra) { 
      FinalDraft.set(FinalDra); 
     } 


     public String getBank() { 
      return Bank.get(); 
     } 

     public void setBank(String Ban) { 
      Bank.set(Ban); 
     } 


     public String getDisclosure() { 
      return Disclosure.get(); 
     } 

     public void setDisclosure(String Dis) { 
      Disclosure.set(Dis); 
     } 


     public String getNema() { 
      return Nema.get(); 
     } 

     public void setNema(String Nem) { 
      Nema.set(Nem); 
     } 

     public String getBudget() { 
      return Budget.get(); 
     } 

     public void setBudget(String Bud) { 
      Budget.set(Bud); 
     } 


     public String getProvided() { 
      return Provided.get(); 
     } 

     public void setProvide(String Pro) { 
      Provided.set(Pro); 
     } 



     public String getImplementation() { 
      return Implementation.get(); 
     } 

     public void setImplementation(String Im) { 
      Implementation.set(Im); 
     } 


     public String getComment() { 
      return Comment.get(); 
     } 

     public void setComment(String Comm) { 
      Comment.set(Comm); 
     } 

    } 


    private void write() throws FileNotFoundException, IOException { 


     try { 


      File myFile = new File("example.xlsx"); 
      final XSSFWorkbook workbook; 
      if (myFile.exists() == false) { 
       System.out.println("Creating a new workbook '" + myFile + "'"); 
       workbook = new XSSFWorkbook(); 

      } else { 
       System.out.println("Appending to existing workbook '" + myFile + "'"); 
       final InputStream is = new FileInputStream(myFile); 
       try { 
        workbook = new XSSFWorkbook(is); 
       } finally { 
        is.close(); 
       } 

      } 
      int sheetIndex = 1; 
      while (workbook.getSheet("sample" + sheetIndex) != null) { 
       sheetIndex++; 
      } 

      XSSFSheet spreadsheet = workbook.createSheet("sample"); 

      XSSFRow row = null; 
      XSSFCell cell = null; 

      row = spreadsheet.createRow(0); 
      cell = row.createCell(0); 
      cell.setCellValue("Component"); 

      cell = row.createCell(1); 
      cell.setCellValue("Activity"); 

      cell = row.createCell(2); 
      cell.setCellValue("TOR"); 

      cell = row.createCell(3); 
      cell.setCellValue("Contract"); 

      cell = row.createCell(4); 
      cell.setCellValue("First Draft"); 

      cell = row.createCell(5); 
      cell.setCellValue("Final Draft"); 

      cell = row.createCell(6); 
      cell.setCellValue("Bank Clearance"); 

      cell = row.createCell(7); 
      cell.setCellValue("Disclosure"); 

      cell = row.createCell(8); 
      cell.setCellValue("NEMA Licence"); 

      cell = row.createCell(9); 
      cell.setCellValue("Budget Request & Prepared"); 

      cell = row.createCell(10); 
      cell.setCellValue("Budget Provided"); 

      cell = row.createCell(11); 
      cell.setCellValue("Begin & Implementation"); 

      cell = row.createCell(12); 
      cell.setCellValue("Comments"); 



      int i = 1; 
      for (Items item: tableViewForExcel.getItems()) { 
       row = spreadsheet.createRow(i); 
       // row.createCell(0).setCellValue(item.getComponent()); 

       cell = row.createCell(0); 
       cell.setCellValue(tblComponent.getCellData(1).toString()); 

       cell = row.createCell(1); 
       cell.setCellValue(tblActivity.getCellData(1).toString()); 

       cell = row.createCell(2); 
       cell.setCellValue(tableColumnForTor.getCellData(1).toString()); 

       cell = row.createCell(3); 
       cell.setCellValue(tblContract.getCellData(1).toString()); 

       cell = row.createCell(4); 
       cell.setCellValue(tblfirst.getCellData(1).toString()); 

       cell = row.createCell(5); 
       cell.setCellValue(tblFinal.getCellData(1).toString()); 

       cell = row.createCell(6); 
       cell.setCellValue(tblBank.getCellData(1).toString()); 

       cell = row.createCell(7); 
       cell.setCellValue(tblDisclosure.getCellData(1).toString()); 

       cell = row.createCell(8); 
       cell.setCellValue(tblNema.getCellData(1).toString()); 

       cell = row.createCell(9); 
       cell.setCellValue(tblBudgetRe.getCellData(1).toString()); 

       cell = row.createCell(10); 
       cell.setCellValue(tblBudgetPro.getCellData(1).toString()); 

       cell = row.createCell(11); 
       cell.setCellValue(tblBegin.getCellData(1).toString()); 

       cell = row.createCell(12); 
       cell.setCellValue(tblComments.getCellData(1).toString()); 

       //.... add other column data as well 
       i++; 
      } 

      FileOutputStream out = new FileOutputStream(myFile); 
      workbook.write(out); 
      out.close(); 
      System.out.println("Data is wrtten Successfully"); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 


    @FXML 
    private void onClickToAddOntheTable(ActionEvent event) { 
     tableViewForExcel.getItems().add(new Items(
      cmbComponent.getValue().toString(), 
      txtActivity.getText(), 
      dateTor.getValue().toString(), 
      dateContract.getValue().toString(), 
      dateFirstDraft.getValue().toString(), 
      dateFinalDraft.getValue().toString(), 
      dateBank.getValue().toString(), 
      dateDisclosure.getValue().toString(), 
      dateNema.getValue().toString(), 
      dateBudget.getValue().toString(), 
      dateProvided.getValue().toString(), 
      dateImplementation.getValue().toString(), 

      txtComments.getText())); 

     onClickToReset(event); 



    } 

    @FXML 
    private void onClickToSaveInExcel(ActionEvent event) { 
     try { 
      write(); 
     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

    @FXML 
    private void onClickToReset(ActionEvent event) { 
     cmbComponent.setValue(null); 
     txtActivity.clear(); 
     dateTor.setValue(null);; 
     dateContract.setValue(null); 
     dateFirstDraft.setValue(null); 
     dateFinalDraft.setValue(null); 
     dateBank.setValue(null); 
     dateDisclosure.setValue(null); 
     dateNema.setValue(null); 
     dateBudget.setValue(null); 
     dateProvided.setValue(null); 
     dateImplementation.setValue(null); 
     txtComments.clear(); 
    } 



    @FXML 
    private void onClickToResetTable(ActionEvent event) { 
     tableViewForExcel.getItems().clear(); 
    } 


    @FXML 
    private void onClickToCreateAnotherSheet(ActionEvent event) { 
     LoadAnotherSheet(); 

    } 

    private void LoadAnotherSheet() { 
     Parent root = null; 
     try { 
      root = FXMLLoader.load(getClass().getResource("SafeguardTrackingToolNewSheetUI.fxml")); 
      Scene scene = new Scene(root); 
      Stage nStage = new Stage(); 
      nStage.setScene(scene); 
      //nStage.setMaximized(true); 
      nStage.setTitle("Another Sheet"); 
      nStage.show(); 
      Stage stage = (Stage) btnCreateAnotherSheet.getScene().getWindow(); 
      stage.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 



    public class Details { 

     private final StringProperty ministryOfWater; 
     private final StringProperty ministyOfLands; 

     public Details(String ministryOfWater, String ministyOfLands) { 
      this.ministryOfWater = new SimpleStringProperty(ministryOfWater); 
      this.ministyOfLands = new SimpleStringProperty(ministyOfLands); 
     } 

     public String getMinistryOfWater() { 
      return ministryOfWater.get(); 
     } 

     public void setMinistryOfWater(String ministryOfWater) { 
      this.ministryOfWater.set(ministryOfWater); 
     } 

     public StringProperty ministryOfWaterProperty() { 
       return ministryOfWater; 
      } 
      //finished ministry of water 

     public String getMinistyOfLands() { 
      return ministyOfLands.get(); 
     } 

     public void setMinistyOfLands(String ministyOfLands) { 
      this.ministyOfLands.set(ministyOfLands); 
     } 

     public StringProperty ministyOfLandsProperty() { 
      return ministyOfLands; 
     } 

     //finished with the ministry of lands 

     @Override 
     public String toString() { 
      return getMinistryOfWater() + " " + getMinistyOfLands(); 
     } 

    } 

} 
+1

的可能的复制(http://stackoverflow.com/questions/38331356/how-to-display-a-text-on-a-textfield-when-selecting-an-item-from-a-com) – fabian

+0

是的,但是那个链接里没有答案 –

回答

1

getSelectedItem()被调用时,选择是null,所以你的谓词总是失败。一种方法是设置所需的索引并对其进行测试。

cmbComponent.getSelectionModel().selectFirst(); 
if (cmbComponent.getSelectionModel().getSelectedIndex() == 0) { 
    txtActivity.setText("1.0.0"); 
} 

我尝试使用else if条件设置,如“2.0.0”不会回应其他文本。

看你对这个话题以前question,它看起来像你想更新TextFieldComboBox变化时。实施@fabian建议的first approach,下面的更新示例将ChangeListener添加到ComboBox。监听器从Details的选定实例中提取所需的文本,并使用它更新TextField

image

为试:?如何选择从JavaFX中一个ComboBox项目时在文本字段显示不同的文本]

import javafx.application.Application; 
import javafx.beans.property.SimpleStringProperty; 
import javafx.beans.property.StringProperty; 
import javafx.collections.FXCollections; 
import javafx.collections.ObservableList; 
import javafx.scene.Scene; 
import javafx.scene.control.ComboBox; 
import javafx.scene.control.TextField; 
import javafx.scene.layout.VBox; 
import javafx.stage.Stage; 

/** 
* @see https://stackoverflow.com/a/38347332/230513 
*/ 
public class ComboBoxTest extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     primaryStage.setTitle("ComboBoxTest"); 

     final TextField txtActivity = new TextField(); 
     final ComboBox cmbComponent = new ComboBox(); 
     ObservableList<Details> cmbComponentData = FXCollections.observableArrayList(); 
     cmbComponentData.add(new Details("Ministry of Water", "1.0.0")); 
     cmbComponentData.add(new Details("Ministry of Lands", "2.0.0")); 
     cmbComponentData.add(new Details("Ministry of Minerals", "3.0.0")); 
     cmbComponentData.add(new Details("Ministry of ManKind", "4.0.0")); 
     cmbComponent.setItems(cmbComponentData); 
     cmbComponent.getSelectionModel().selectFirst(); 
     txtActivity.setText(cmbComponentData.get(0).getText()); 
     cmbComponent.valueProperty().addListener((o, ov, nv) -> { 
      Details d = (Details) nv; 
      txtActivity.setText(d.getText()); 
     }); 

     VBox root = new VBox(); 
     root.getChildren().addAll(cmbComponent, txtActivity); 
     Scene scene = new Scene(root); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    private static class Details { 

     private final StringProperty name; 
     private final StringProperty text; 

     public Details(String name, String text) { 
      this.name = new SimpleStringProperty(name); 
      this.text = new SimpleStringProperty(text); 
     } 

     public String getName() { 
      return name.get(); 
     } 

     public void setName(String name) { 
      this.name.set(name); 
     } 

     public StringProperty nameProperty() { 
      return name; 
     } 

     public String getText() { 
      return text.get(); 
     } 

     public void setText(String text) { 
      this.text.set(text); 
     } 

     public StringProperty textProperty() { 
      return text; 
     } 

     @Override 
     public String toString() { 
      return getName(); 
     } 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 

} 
+0

我试过了你的解决方案,但它只输出第一个文本“1.0.0”。我试图使用else if条件来设置另一个文本,如“2.0.0”它不会回应 –

+0

我elabor在上面。 – trashgod

+0

感谢trashgod它的工作! –

相关问题