Ok, donc j'ai un problème assez spécifique et pour moi assez compliqué, car je suis un débutant GWT.Modifier la valeur du widget dans la table GWT flex lorsque la valeur d'un autre widget change?
J'ai une table flexible GWT, que j'utilise pour ajouter dynamiquement des lignes, dont les cellules contiennent des widgets GWT. Le numéro de ligne change, mais le nombre de colonnes est statique, toujours 6. Chaque ligne contient une cellule avec un bouton Supprimer et cinq cellules avec leur propre zone de texte. Ce que je dois faire est en quelque sorte de coder un type de relation entre la zone de texte dans la cellule 6 d'une ligne et la zone de texte dans la cellule 5 dans la ligne suivante (et vice versa). Pour illustrer ceci: lorsque quelque chose change dans la zone de texte [1,6], le contenu de la zone de texte [2,5] doit être remplacé par la même valeur. Si la zone de texte à [2,5] change, la zone de texte à [1,6] doit également être modifiée. Je ne peux pas utiliser un bouton pour valider les modifications, cela doit se faire via onValueChange ou Blur ou quelque chose de similaire, ce qui ne nécessite pas que l'utilisateur effectue une action spécifique. Mon problème provient principalement d'essayer de comprendre comment adresser des cellules spécifiques dans la table flex et leur contenu. Pour le bouton de suppression, la solution était assez facile avec un gestionnaire d'événement click, mais pour ce problème, je n'arrive pas à trouver une solution. Malheureusement, je ne peux pas non plus fournir le code que j'ai jusqu'à présent, car c'est un secret d'affaires. Je ne peux donner qu'une description générale du problème comme celle ci-dessus.
EDIT: En fait, c'est probablement plus un problème de ne pas avoir beaucoup de code en termes de ce problème spécifique.
Ce que j'ai est une table flexible, qui a initialement seulement la ligne d'en-tête. En cliquant sur un bouton en dessous de cette table, la méthode addNewField() est appelée, qui contient uniquement la création, la définition des valeurs par défaut et l'ajout des champs de texte dans une nouvelle ligne.
addNewField() {
int rows = flextable.getRowCount();
Button removeBtn = new Button("x");
removeBtn.getElement().setId(Integer.toString(rows));
//then the button's event handler
TextBox name = new TextBox();
name.setText("something");
flextable.setWidget(rows, 0, "name");
//repeat 4 more times with incrementing columns for the other widgets
}
De cette façon, j'ajoute des lignes entières de TextBox modifiables. Ce dont j'ai besoin est un moyen d'influencer les valeurs de la 6ème colonne TextBox d'une ligne choisie et la 5ème colonne TextBox de la ligne choisie + 1.
EDIT2: J'ai essayé l'option sale juste pour voir comment ça irait et en quelque sorte la comparaison à l'intérieur de la si casse l'application. Le compilateur détecte une exception nullpointer et je ne peux même pas le déboguer avec des points d'arrêt car il échoue à compiler et ne démarre pas. Je ne peux pas comprendre pourquoi cependant. J'ai jeté le code directement dans l'événement à des fins de test, alors pardonnez la laideur.
TextBox bis = new TextBox();
bis.setText(rows + ":10:00");
subs.setWidget(rows, 5, bis);
bis.addValueChangeHandler(new ValueChangeHandler<String>()
{
@Override
public void onValueChange(ValueChangeEvent<String> event)
{
allRows: for (int i = 0; i < subs.getRowCount(); i++)
{
for (int j = 0; j < subs.getCellCount(i); j++)
{
if (subs.getWidget(i, j) == bis)
{
TextBox widgetAtColumnSix = ((TextBox) subs.getWidget(i, 5));
String text = widgetAtColumnSix.getText();
TextBox widgetAtColumnFiveRowPlusOne = ((TextBox) subs.getWidget(i + 1, 4));
widgetAtColumnFiveRowPlusOne.setText(text);
break allRows;
}
}
}
}
});
En fait vous pouvez donner un exemple de code qui fonctionne sans dévoiler des secrets d'affaires.Montrer ce que vous avez fait aiderait énormément – Tobika