1
votes

I'm making a new class called 'Cell' which extends the GWT Widget class. The purpose of this class is to be a cell in a spreadsheet -- it therefore must be able to switch between being a GWT Label object and a GWT TextBox object.

The only way that I can think of doing this is by making Cell extend Widget and include a private Widget called 'cell' which I can store the current Label or TextBox object with. Like so...

public class Cell extends Widget {

private Widget cell;

...

}

Unfortunately, this solution is not ideal because if I want Cell to fully operate like a Widget, I will have override Widget's methods to point to my inner 'cell' Widget. Is there a more elegant way of creating a Cell Widget which can be either a Label or TextBox?

1

1 Answers

8
votes

Why not extend Composite instead of extending Widget?

public class Cell extends Composite {
    private Label label;
    private TextBox textBox;
    private SomeContainerWidget container;

   ...
}

Just add/remove the label or the textBox widget to the container as needed.

Using composite is the more elegant way as you do not expose the entire Widget interface, but only the methods needed for your spreadsheet cell.

Checkout this section from GWT docs for building custom widgets for more information.