Reputation: 81
So i want to get a selected item from a Combobox, after clicking on that selected item it should return a different text on a TextField in javafx. I am having a problem in doing so this is my code
I have a ComboBox of type Details , in which I have added few object of Details Class
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();
}
}
this is my full 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();
}
}
}
how can i display a different text from selected Combobox to this textfield declared as
TextField txtActivity
i am stuck here
if(cmbComponent.getSelectionModel().getSelectedItem().equals("Ministry of Water")){
txtActivity.setText("1.0.0");
}
need help Thanks!
EDIT
I already got the solution from this link How to set text to a TextField when selecting an Item from a Combobox Javafx?
Upvotes: 0
Views: 997
Reputation: 82461
Depending on your needs you could:
value
property:cmbComponent.valueProperty().addListener((observable, oldValue, newValue) -> {
txtActivity.setText(newValue == null ? null : newValue.toString());
});
This way the TextField
will remain editable after selecting the item.
txtActivity.textProperty().bind(Bindings.createStringBinding(() -> {
Details d = cmbComponent.getValue();
return d == null ? null : d.toString();
}, cmbComponent.valueProperty()));
This way the TextField
is no longer editable.
TextFormatter
to the TextField
This allows bidirectional binding. This way you could change the ComboBox
value based on the text input in the 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());
Upvotes: 1