2016-07-13 11 views
1

Ich möchte das ausgewählte Element aus der Combobox bekommen, nach der Veranstaltung klicken Sie zeigt einen anderen Text auf einem TextField- als txtActivity erklärtWie setze ich Text in ein TextField, wenn ich ein Item aus einer Combobox JavaFX auswähle?

ich an dieser Stelle stecken bin, an dem der Code nicht arbeitet helfen muss

Uhr an dieser Stelle stecken

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

} 

Das ist mein voller Code

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

Mögliche Duplikat (http://stackoverflow.com/questions/38331356/how-to-display-a-different-Text-auf-einem-Text-Feld-wenn-wählen-ein-Item-from-a-com) – fabian

+0

Ja, aber es gab keine Antwort in diesem Link –

Antwort

1

Wenn getSelectedItem() aufgerufen wird, lautet die Auswahl null, sodass Ihr Prädikat immer fehlschlägt. Ein Ansatz wäre, den gewünschten Index einzustellen und zu testen.

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

Ich versuchte, den else if Zustand mit einem anderen Text zu setzen, wie „2.0.0“ nicht reagiert.

Ein Blick auf Ihre vorherigen question zu diesem Thema, es sieht aus wie Sie die TextField wenn die ComboBox Änderungen aktualisieren möchten. Bei der Implementierung des von @fabian vorgeschlagenen Beispiels first approach fügt das aktualisierte Beispiel unten ChangeListener zu ComboBox hinzu. Der Listener ruft den erforderlichen Text von der ausgewählten Instanz Details ab und verwendet ihn zum Aktualisieren der TextField.

image

Wie getestet: [? Wie einen anderen Text auf einem TextField- angezeigt wird, wenn ein Element aus einer ComboBox in JavaFX Auswahl]

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

Ich habe versucht Ihre Lösung, aber es gibt nur den ersten Text "1.0.0" aus. Ich habe versucht, die else if-Bedingung zu verwenden, um einen anderen Text wie "2.0.0" zu setzen, wird es nicht antworten –

+0

Ich habe elabor oben. – trashgod

+0

danke trashgod es hat funktioniert !!!! –