gpt4 book ai didi

java - 无法在 JavaFX 中为我的 TableColumn 设置不同的值

转载 作者:行者123 更新时间:2023-12-01 18:02:52 25 4
gpt4 key购买 nike

我尝试在 TableView 列中设置 Button,但没有成功设置不同的按钮。它在所有列上向我显示了相同的按钮。

这个想法是名称设置正确,但我的问题是当我设置cellValueFactory时。这是我的代码:

for (int i = 0; i < listaPatchuriPerBaza.length; i++) {

if (listaPatchuriPerBaza[i].contains(".sql")) {
k = i;
pozitie = poz;
Patch pt = new Patch(listaPatchuriPerBaza[i], "Run" + " " + listaPatchuriPerBaza[i]);
listaPatchuri.add(pt);
masterData.add(pt);
patchColumn.setCellValueFactory(new PropertyValueFactory<Patch, String>("denumire"));
runColumn.setCellValueFactory(new PropertyValueFactory<Patch, String>("btnText"));
runColumn.setCellFactory(new Callback<TableColumn<Patch, String>, TableCell<Patch, String>>() {

@Override
public TableCell<Patch, String> call(TableColumn<Patch, String> param) {

Button btn = new Button(pt.getBtnText());

//Set up the Table
TableCell<Patch, String> cell = new TableCell<Patch, String>() {
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (item != null) {
//actioneaza butonul de run
btn.setOnAction((ActionEvent event) -> {
btn.setDisable(true);
Tooltip tool = new Tooltip("Running");
setTooltip(tool);
System.out.println("ruleaza");
try {
SmbFile script = new SmbFile(path + pt.getDenumire(), userCred);

} catch (MalformedURLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {

SmbFile smbFromFile = new SmbFile(path + pt.getDenumire(), userCred);
SmbFile smbToFile = new SmbFile(path + "Aplicate/" + pt.getDenumire(), userCred);
smbFromFile.renameTo(smbToFile);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
});
setGraphic(btn);

}
}

};

return cell;
}
});

}

tableView.setItems(masterData);

}

最佳答案

为表中的每一行设置一次单元格值工厂和单元格工厂是没有意义的:您所做的就是每次迭代循环时替换工厂。这些是工厂:即创建其他对象的对象。表格列将根据需要调用其call方法来创建多个单元格等。

因此只需设置一次并在 updateItem() 方法中更新按钮的文本即可。该按钮需要是单元格的属性(以便每个单元格都有自己的按钮和自己的文本),而不是单元格工厂的属性(因为只有整个柱的一个细胞工厂)。

runColumn.setCellValueFactory(new PropertyValueFactory<Patch, String>("btnText"));
runColumn.setCellFactory(column -> new TableCell<Patch, String>() {
Button btn = new Button();

{
btn.setOnAction(e -> {
Patch pt = getTableView().getItems().get(getIndex());
btn.setDisable(true);
Tooltip tool = new Tooltip("Running");
setTooltip(tool);
System.out.println("ruleaza");
try {
SmbFile script = new SmbFile(path + pt.getDenumire(), userCred);

} catch (MalformedURLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {

SmbFile smbFromFile = new SmbFile(path + pt.getDenumire(), userCred);
SmbFile smbToFile = new SmbFile(path + "Aplicate/" + pt.getDenumire(), userCred);
smbFromFile.renameTo(smbToFile);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
});
}

@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (item == null) {
setGraphic(null);
} else {
btn.setText(item);
setGraphic(btn);
}
}
});

关于java - 无法在 JavaFX 中为我的 TableColumn 设置不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39350534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com