CompositeCell Javaを使用してGWT内の表のセルの内容をカスタマイズすることができます。他のほとんどのウィジェットのグループをテーブルのセル内に配置して、必要に応じてレイアウトすることができます。問題は、htmlタグを使用して別のテーブルとしてCompositeCellのレイアウトを定義した場合(匿名クラスのCompositeCellの実装を参照)、セルのコンポーネントのイベント処理が緩和されているということです。私たちがコンポジットセルの匿名実装をコメントしている場合は、イベントハンドリングの応答としてポップアップを実現します。GWT:複合セル内のイベントの処理
私は、コンポジットセルの匿名実装をコンテキスト、要素、C、NativeEvent、ValueUpdater )私は、HTMLテーブルタグを使ったセルレイアウトの定義は、GWTウィジェット階層内のイベントチェーンを壊しているが、これまで成功していないと思うからです。
備考:コードのコメント付きバージョンと非コメント化バージョンの両方が同じGUIレイアウトを実現します。この例では、セルのコンテンツをカスタマイズするときにイベント処理を緩和することを示しています。
public class ActionCellTest implements EntryPoint {
private static final String SERVER_ERROR = "An error occurred while " + "attempting to contact the server. Please check your network "
+ "connection and try again.";
private final GreetingServiceAsync greetingService = GWT.create(GreetingService.class);
public void onModuleLoad() {
CellTable<Person> table = new CellTable<ActionCellTest.Person>();
final List<HasCell<Person, ?>> cells = new LinkedList<HasCell<Person, ?>>();
cells.add(new HasCellImpl("first name", new ActionCell.Delegate<Person>() {
@Override
public void execute(Person object) {
Window.alert(object.getFirstName());
}
}));
cells.add(new HasCellImpl("last name", new ActionCell.Delegate<ActionCellTest.Person>() {
@Override
public void execute(Person object) {
Window.alert(object.getLastName());
}
}));
CompositeCell<Person> cell = new CompositeCell<Person>(cells) {
@Override
public void render(Context context, Person value, SafeHtmlBuilder sb) {
sb.appendHtmlConstant("<table><tbody><tr>");
for (HasCell<Person, ?> hasCell : cells) {
render(context, value, sb, hasCell);
}
sb.appendHtmlConstant("</tr></tbody></table>");
}
@Override
protected <X> void render(Context context, Person value, SafeHtmlBuilder sb, HasCell<Person, X> hasCell) {
Cell<X> cell = hasCell.getCell();
sb.appendHtmlConstant("<td>");
cell.render(context, hasCell.getValue(value), sb);
sb.appendHtmlConstant("</td>");
}
@Override
protected Element getContainerElement(Element parent) {
return parent.getFirstChildElement().getFirstChildElement().getFirstChildElement();
}
};
table.addColumn(new TextColumn<ActionCellTest.Person>() {
@Override
public String getValue(ActionCellTest.Person object) {
return object.getFirstName() + " " + object.getLastName();
}
}, "name");
table.addColumn(new Column<Person, Person>(cell) {
@Override
public Person getValue(ActionCellTest.Person object) {
return object;
}
}, "composite");
LinkedList<Person> data = new LinkedList<ActionCellTest.Person>();
data.add(new Person("Amy", "Reed"));
data.add(new Person("Tim", "Gardner"));
table.setRowData(data);
RootPanel.get().add(table);
}
private class HasCellImpl implements HasCell<Person, Person> {
private ActionCell<Person> fCell;
public HasCellImpl(String text, Delegate<Person> delegate) {
fCell = new ActionCell<Person>(text, delegate);
}
@Override
public Cell<Person> getCell() {
return fCell;
}
@Override
public FieldUpdater<Person, Person> getFieldUpdater() {
return null;
}
@Override
public Person getValue(Person object) {
return object;
}
}
private class Person {
private String fFirstName;
private String fLastName;
public Person(String first, String last) {
fFirstName = first;
fLastName = last;
}
public String getFirstName() {
return fFirstName;
}
public String getLastName() {
return fLastName;
}
}
}
私は使用しました。CompositeCell.javaのすべてのソルをコピーし、私が望むようにカスタマイズし、 'CustomCompositeCell celll = new ...'として作成します。私のnoobのアイデアを申し訳ありませんが動作します:D – Cataclysm
私は今gwt2.5を使用していますが、まだエラーが発生します。 – Cataclysm