我想从组合框中获取选定的项目,在单击事件后,它将在声明为txtActivity的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();
}
}
}
最佳答案
调用getSelectedItem()
时,选择为null
,因此谓词始终失败。一种方法是设置所需的索引并对其进行测试。
cmbComponent.getSelectionModel().selectFirst();
if (cmbComponent.getSelectionModel().getSelectedIndex() == 0) {
txtActivity.setText("1.0.0");
}
我尝试使用
else if
条件设置不会响应的其他文本,例如“ 2.0.0”。查看有关该主题的上一个question,您似乎想在
TextField
更改时更新ComboBox
。实现@fabian建议的first approach,下面的更新示例将ChangeListener
添加到ComboBox
。侦听器从选定的Details
实例中获取所需的文本,然后使用它来更新TextField
。经测试:
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);
}
}
关于java - 从组合框Javafx中选择项目时,如何将文本设置为TextField?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38344118/