10
votes

Comment ajouter Clickhandler sur Imagecell dans la cellule GWT?

J'ai essayé cela mais n'a pas fonctionné

Column<ContactInfo, String> imageColumn = new Column<ContactInfo, String>(new ImageCell()) {
       @Override
       public String getValue(ContactInfo object) {
           return "contact.jpg";
          }
        };
        imageColumn.setFieldUpdater(new FieldUpdater<ContactInfo, String>() {

        @Override
        public void update(int index, ContactInfo object, String value) {
        Window.alert("You clicked " + object.firstName);
        }

    });
cellTable.addColumn(imageColumn, SafeHtmlUtils.fromSafeConstant("<br/>"));

gwt

1 commentaires

J'ai travaillé autour est d'utiliser ButtonCell au lieu de la cellule d'image puis j'ai changé le style de bouton et mais l'image d'arrière-plan. ça marche bien raconter maintenant.


8 Réponses :


-1
votes

Vous avez besoin de SANKEVENTS () avec des bits appropriés.

Reportez-vous à la réponse de la question Ajout de clickhandler à DIV qui contient de nombreux autres widget .


0 commentaires

1
votes

J'ai fait quelque chose de similaire mélange une cellule de bouton avec le rendu d'un imagecell ... XXX

Vous obtenez l'idée. Le seul problème est qu'il n'affiche pas l'icône "Main" lorsque vous le survolez ... probablement, il peut être corrigé en réglant le CSS.


0 commentaires

8
votes

Vous pouvez prolonger la classe Imagecell et la remplacement de 2 c'est des méthodes - GetConsuméDevents et OnBrowserEvent. Exemple: xxx


1 commentaires

Il y a toutes sortes de problèmes avec cela. Pour commencer, il s'agit d'un double clic, au lieu de cliquer. Cela ne gère pas les personnes aveugles tabbant, etc., vérifiez la solution ci-dessous par mutexkid.



19
votes
final Column<ReportDTOProxy, String> buttonImageCellTest = new Column<ProxyObject, String>(new ButtonImageCell()) {
    @Override
    public String getValue(ProxyObject row) {
        //url to image
        return row.getImageUrl();
    }
};

1 commentaires

C'est la meilleure solution. Complètement sous-évalué.



1
votes

Vous pouvez essayer cela plutôt que d'utiliser ButtonCell ou Imagecell. Cela fonctionnera à coup sûr. Comme je l'ai mis en œuvre pour mes besoins. Faites-moi savoir comment ça se passe ..

 ClickableTextCell imageCell = new ClickableTextCell() {
        @Override
        public void render(Context context, SafeHtml data, SafeHtmlBuilder sb) {
            if (data != null) {
                String imagePath = "icon.png";
                sb.append(imagePath);
            }
        }
    };

Column<ContactInfo, String> imageColumn = new Column<ContactInfo, String>(imageCell) {
       @Override
       public String getValue(ContactInfo object) {
           return "";
          }
        };
        imageColumn.setFieldUpdater(new FieldUpdater<ContactInfo, String>() {

        @Override
        public void update(int index, ContactInfo object, String value) {
        Window.alert("You clicked " + object.firstName);
        }

    });
cellTable.addColumn(imageColumn, SafeHtmlUtils.fromSafeConstant("<br/>"));


0 commentaires

1
votes

Une bonne solution pour ce problème, si vous utilisez ActionCell qui est capable de gérer un clic. L'utilisation de celui-ci est un peu complicatinée, mais pour moi, cela fonctionnait plutôt bien.

Tout d'abord, vous devez initialiser ActionCell avec un délégué, dans le constructeur, écrire nouvelle actioncell.delegate code> . Dans ce remplacement, la méthode exécuter code> et dans celle-ci écrit votre code qui gère l'événement cliquant. P>

L'autre chose que vous devez faire est de construire un HTML à partir de l'image. La classe code> SafeehtMlutils code> vous donne un moyen très facile de le faire. C'est frient frttrustedstring Structure vous aide à construire le HTML: P>

IdentityColumn<Type> imageCell = new IdentityColumn<Type>(new ActionCell<Type>("AnyString", 
                new ActionCell.Delegate<Type>() {

            @Override
            public void execute(final Type item) {
                "your code"
            }
        }) {

            @Override
            public void render(Context context, Type value, SafeHtmlBuilder sb) {
                if (value != null) {
                    SafeHtml html = SafeHtmlUtils.fromTrustedString(AbstractImagePrototype.create(resource.image).getHTML());
                    sb.append(html);
                }
            }
        });


0 commentaires

1
votes

J'ai tout ce qui précède et j'ai ajouté-les dans mon application. Merci à tous. Stackoverflow Rocks! XXX


1 commentaires

Hey mec ... tu es incroyable ... merci beaucoup..Je t'a donné un uppote. Ummaaa



0
votes

Ceci a fonctionné pour moi: xxx pré>

dans une classe contenant table de cellulation code>: p> xxx pré> .. . p> xxx pré>

... p> xxx pré>

où le imageuresource code> vient de ( Ressources Code>): P>

public interface TableResources extends CellTable.Resources {

    interface TableStyle extends CellTable.Style {
    }

    @Source("/images/on.png")
    ImageResource getOnImg();

    @Source("/images/off.png")
    ImageResource getOffImg();
}


0 commentaires