usar setconverter seleccionar item from elementos crear combo agregar java javafx combobox

setconverter - seleccionar un item de un combobox javafx



¿Cómo mostrar un texto diferente en un TextField cuando se selecciona un elemento de un ComboBox en Javafx? (1)

Así que quiero obtener un elemento seleccionado de un cuadro combinado, después de hacer clic en ese elemento seleccionado, debe devolver un texto diferente en un campo de texto en javafx. Tengo un problema al hacerlo, este es mi código

Tengo un ComboBox de tipo Detalles, en el que he agregado pocos objetos de la clase Detalles

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(); } }

este es mi código completo

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(); } } }

¿Cómo puedo mostrar un texto diferente del Combobox seleccionado a este campo de texto declarado como

TextField txtActivity

estoy atascado aquí

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

necesito ayuda ¡Gracias!

EDITAR

Ya obtuve la solución de este enlace ¿Cómo establecer texto en un TextField cuando selecciono un elemento de un Combobox Javafx?


Dependiendo de sus necesidades, usted podría:

Agregue un oyente a la propiedad de value :

cmbComponent.valueProperty().addListener((observable, oldValue, newValue) -> { txtActivity.setText(newValue == null ? null : newValue.toString()); });

De esta forma, TextField seguirá siendo editable después de seleccionar el elemento.

Creando un enlace

txtActivity.textProperty().bind(Bindings.createStringBinding(() -> { Details d = cmbComponent.getValue(); return d == null ? null : d.toString(); }, cmbComponent.valueProperty()));

De esta forma, TextField ya no se puede editar.

Agregar un TextFormatter al TextField

Esto permite la unión bidireccional. De esta forma, podría cambiar el valor de ComboBox función de la entrada de texto en el TextField .

TextFormatter<Details> formatter = new TextFormatter<>(new StringConverter<Details>() { @Override public String toString(Details object) { return object == null ? "" : object.toString(); } @Override public Details fromString(String string) { // Return Details object based on String input in TextField return string == null || string.isEmpty() ? null : cmbComponent.getItems().stream().filter(d -> string.equals(d.toString())).findAny().orElse(null); } }); txtActivity.setTextFormatter(formatter); cmbComponent.valueProperty().bindBidirectional(formatter.valueProperty());