J'ai fait une fabrique de cellules personnalisée. La plupart des valeurs s'affichent correctement mais d'autres non. Au fur et à mesure que je dilate et écrase les cellules, le problème s'aggrave. La chose étrange est la méthode héritée setText()
fonctionne comme prévu. J'utilise seulement la méthode setText()
pour m'aider à comprendre pourquoi cela ne fonctionne pas. Vous remarquerez le contenu de la méthode setText()
à gauche de mon contenu personnalisé.Les nœuds d'usine de cellules personnalisées Javafx ne fonctionnent pas mais la méthode setText() héritée dans l'usine Cell est
En regardant la première cellule, vous remarquerez qu'aucun de mes contenus de cellules personnalisés ne s'affiche (le plus notable étant que le nœud TextFlow
ne s'affiche pas). Cependant, le contenu de setText()
le fait, donc je sais que la logique des instructions if fonctionne comme prévu. Des idées sur ce qui se passe?
ci-dessous est le code:
import java.util.Collections;
import java.util.List;
import javafx.collections.ObservableList;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeTableCell;
import javafx.scene.control.TreeTableRow;
import javafx.scene.control.TreeTableView;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.scene.text.TextFlow;
public class CellValueMaker extends TreeTableCell<ProviderAttribute, ProviderAttribute>{
ImageView up;
ImageView down;
GridPane grid;
Text cellName;
Text cellDesc;
Label serialNumber;
VBox innerVB;
GridPane innerLowerGrid;
ImageButton upButton;
ImageButton downButton;
TextFlow flow;
public CellValueMaker(){
up = new ImageView(new Image(getClass().getResourceAsStream(
"/resources/up.png")));
up.setFitHeight(15);
up.setFitWidth(15);
upButton = new ImageButton(up);
down = new ImageView(new Image(getClass().getResourceAsStream(
"/resources/down.png")));
down.setFitHeight(15);
down.setFitWidth(15);
downButton = new ImageButton(down);
grid = new GridPane();
innerVB = new VBox();
innerVB.setPadding(new Insets(0, 0, 0, 3));
innerLowerGrid = new GridPane();
serialNumber = new Label("");
serialNumber.setFont(Font.font ("System", 10));
innerLowerGrid.add(serialNumber, 1, 0);
cellName = new Text("");
cellDesc = new Text("");
cellDesc.setStyle("-fx-font-weight: bold");
flow = new TextFlow();
flow.getChildren().addAll(cellDesc, cellName);
innerVB.getChildren().addAll(flow, serialNumber);
upButton.setOnMouseClicked(new OnMoveUp());
downButton.setOnMouseClicked(new OnMoveDown());
// set lower nested grid
grid.add(upButton, 0, 0);
grid.add(downButton, 1, 0);
grid.add(innerVB, 2, 0);
setGraphic(grid);
}
@Override
public void updateItem(ProviderAttribute item, boolean empty){
super.updateItem(item, empty);
if(item == null || empty){
setGraphic(null);
setText("");
setStyle("-fx-background-color: white;");
cellName.setText("");
cellDesc.setText("");
}else{
if(item instanceof DigitalIdentityType){
DigitalIdentityType certBean = item.getEncapsulatedBean();
setGraphic(grid);
cellName.setText(item.getStringName());
cellDesc.setText("Cert: ");
setText(item.getStringName());
setStyle("-fx-background-color: darkkhaki;");
if(certBean.getParentCert() != null){
serialNumber.setText("SN: " + certBean.getParentCert().getSerialNumber().toString());
}
}else if(item instanceof TSPServiceType){
setGraphic(grid);
cellName.setText(item.getStringName());
serialNumber.setText("");
cellDesc.setText("Service: ");
setStyle("-fx-background-color: lightblue;");
setText("Service: " + item.getStringName());
}else if(item instanceof TSPType){
setGraphic(grid);
cellName.setText(item.getStringName());
serialNumber.setText("");
cellDesc.setText("TSP: ");
setText("TSP: " + item.getStringName());
setStyle("-fx-background-color: bisque;");
}else{
GridPane pane = new GridPane();
pane.add(innerVB, 0, 0);
setGraphic(pane);
setText(item.getStringName());
serialNumber.setText("");
setStyle("-fx-background-color: white;");
// cellName.setText(item.getStringName());
}
}
}
public class OnMoveUp implements EventHandler<MouseEvent>{
private final String STYLE_PRESSED = "-fx-background-color: transparent; -fx-padding: 3 1 1 3;";
@SuppressWarnings("unchecked")
@Override
public void handle(MouseEvent event) {
Button button = (Button)event.getSource();
button.setStyle(STYLE_PRESSED);
// get the table
TreeTableView<ProviderAttribute> table = (TreeTableView<ProviderAttribute>)
button.getParent().getParent().getParent()
.getParent().getParent().getParent().getParent();
// get the item
TreeTableRow<ProviderAttribute> row = (TreeTableRow<ProviderAttribute>)
button.getParent().getParent().getParent();
ProviderAttribute itemValue = row.getItem();
TreeItem<ProviderAttribute> item = row.getTreeItem();
ObservableList<TreeItem<ProviderAttribute>> list = item.getParent().getChildren();
if(item == null || list == null || list.size() <= 1) return;
// swap the current item with the one above it
int index = getIndexOf(list, itemValue);
if(index > 0){
Collections.swap(list, index, index-1);
table.getSelectionModel().clearSelection();
}
}
}
public class OnMoveDown implements EventHandler<MouseEvent>{
private final String STYLE_PRESSED = "-fx-background-color: transparent; -fx-padding: 3 1 1 3;";
@SuppressWarnings("unchecked")
@Override
public void handle(MouseEvent event) {
Button button = (Button)event.getSource();
button.getGraphic().setOpacity(50);
button.setStyle(STYLE_PRESSED);
// get the table
TreeTableView<ProviderAttribute> table = (TreeTableView<ProviderAttribute>)
button.getParent().getParent().getParent()
.getParent().getParent().getParent().getParent();
// get the item
TreeTableRow<ProviderAttribute> row = (TreeTableRow<ProviderAttribute>)
button.getParent().getParent().getParent();
ProviderAttribute itemValue = row.getItem();
TreeItem<ProviderAttribute> item = row.getTreeItem();
ObservableList<TreeItem<ProviderAttribute>> list = item.getParent().getChildren();
if(item == null || list == null || list.size() <= 1) return;
int index = getIndexOf(list, itemValue);
if(index < list.size() - 1){
Collections.swap(list, index, index+1);
table.getSelectionModel().clearSelection();
}
}
}
public int getIndexOf(List<TreeItem<ProviderAttribute>> items, ProviderAttribute bean){
int index = -1;
for(int i = 0; i < items.size(); i++){
if(items.get(i).getValue().equals(bean))
return i;
}
return index;
}
public class ImageButton extends Button {
private final String STYLE_NORMAL = "-fx-background-color: transparent; -fx-padding: 2, 2, 2, 2;";
public ImageButton(ImageView image) {
setGraphic(image);
setStyle(STYLE_NORMAL);
setOnMouseReleased(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
setStyle(STYLE_NORMAL);
// setOpacity(0);
}
});
}
}
// public class EventHandler
}
Brillant comme toujours. Merci mon pote! Fonctionne comme un champion – MarsTwo