java - 将按钮添加到带有条件的 javafx 表视图
问题描述
我是 javafx 的新手,正在努力将 Button 添加到具有条件的 TableView 中。
如果条件为真,它将添加按钮,如果为假,则按钮不会添加到 tableView 。我用谷歌搜索,但没有找到任何建议或解决方案。有没有办法实现它。预先感谢。
这是我的控制器
@FXML
TableView<Employee> employeeTable;
@FXML
TableColumn<Employee, Integer> col_id;
@FXML
TableColumn<Employee, String> col_fatherName;
@FXML
TableColumn<Employee, String> col_CNIC;
@FXML
TableColumn<Employee, String> col_gender;
@FXML
TableColumn<Employee, Button> update;
List<Employee> employees = new ArrayList<>();
ObservableList<Employee> obs = FXCollections.observableArrayList();
private Employee data;
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
setColumnProperties();
addButtonToTable();
addDeleteButton();
loadData();
}
private void loadData() {
employees = employeeDAO.findAllEmployees();
obs = FXCollections.observableArrayList(employees);
employeeTable.getItems().clear();
employeeTable.getItems().addAll(obs);
}
public void setColumnProperties() {
col_id.setCellValueFactory(new PropertyValueFactory<Employee, Integer>("id"));
col_fatherName.setCellValueFactory(new PropertyValueFactory<Employee, String>("fatherName"));
col_CNIC.setCellValueFactory(new PropertyValueFactory<Employee, String>("cnic"));
col_gender.setCellValueFactory(new PropertyValueFactory<Employee, String>("name"));
}
private void addButtonToTable() {
Callback<TableColumn<Employee, Button>, TableCell<Employee, Button>> cellFactory = new Callback<TableColumn<Employee, Button>, TableCell<Employee, Button>>() {
@Override
public TableCell<Employee, Button> call(final TableColumn<Employee, Button> param) {
final TableCell<Employee, Button> cell = new TableCell<Employee, Button>() {
Image imgEdit = new Image(getClass().getResourceAsStream("/images/download.png"));
{
}
@Override
public void updateItem(Button item, boolean empty) {
super.updateItem(item, empty);
edite=new Button("Btn"); // global btn
if (empty) {
setGraphic(null);
} else {
// here i am trying to write condition
Iterator ite= employeeDAO.findAllEmployees().iterator();
while (ite.hasNext()){
Employee employee=(Employee) ite.next();
if (employee.getName().equals("jnk"))
{
edite.setOnAction((ActionEvent event) -> {
System.out.println( edite.getId());
data = getTableView().getItems().get(getIndex());
fatherName.setText(data.getFatherName());
CNIC.setText(data.getCnic());
name.setText(data.getName());
register_btn.setText("Update");
});
edite.setStyle("-fx-background-color: transparent;");
ImageView iv = new ImageView();
iv.setFitHeight(50);
iv.setFitWidth(50);
iv.setImage(imgEdit);
iv.setPreserveRatio(true);
iv.setSmooth(true);
iv.setCache(true);
edite.setGraphic(iv);
setGraphic(edite);
setText(null);
}
else{
System.out.println("not working");
}
}
}
}
};
return cell;
}
;
};
update.setCellFactory(cellFactory);
employeeTable.getColumns().add(update);
register_btn.setText("Register");
}
我的目标是在 Name='jnk' 时添加按钮,但在条件为真后,它将按钮添加到所有行。
我的员工班
public class EMployee{
private int id;
private String name;
private String cnic;
private String skill;
private String dob;
private String fatherName;
private String gender;
private int value;
setter and getter
}
EmployeeDao 类是
Public Class EmployeeDAO extends JdbcDaoSupport {
public List<Employee> findAllEmployees() {
List<Employee> empList = new ArrayList<>();
String query = "select * from employee";
getJdbcTemplate().query(query,
new BeanPropertyRowMapper<Employee>(Employee.class));
return empList;
}
}
解决方案
推荐阅读
- ios - startMonitoringSignificantLocationChanges 未立即启动
- tuples - 为什么我的语法是错误的?(TypeError:“元组”对象不可调用)
- javascript - 如何在 html 中使用 localStorage 保存表中的数据和行
- angular - Angular 根据从列表中动态选择的选项值显示或隐藏元素
- gdb - gdb的tui可以分成三个窗口吗?
- python - 在具有浮点边界的区间内查找整数时的舍入问题
- java - SearchView 不过滤项目
- r - r If I have two seperate groups that have the same contents, how can I delete one of them?
- javascript - 删除没有 html corespondent 的 Javascript 元素
- python - 如何在pytest中回答来自控制台脚本的输入调用?