私は使用しています:SmartGwt 3.0; gwt 2.4; Firefox 11 および Google Chrome 19.0.1084.52。
まず、私の英語がとても下手なので、謝りたいと思います。必要なのは、リストグリッドのセル内にコンポーネント (ラベル、画像など) をドラッグ アンド ドロップすることです。レコードをドラッグできることはわかっていますが、セル内に任意のタイプのコンポーネントを追加したいと考えています。それ以外の場合は、セル内にコンポーネントを追加できる大量のプロパティリストグリッドを持つテーブルコンポーネントを作成するためにプレイするため、どんなに小さな助けでも感謝します。そして、真実は問題に対処することではありません。
smartgwt の最新バージョンを使用しています
メソッド「getShowRecordComponents」、「getShowRecordComponentsByCell」、「WillAcceptDrop」、および「CreateRecordComponent」を試しています。コンポーネント smartgwt をドラッグ アンド ドロップする必要があります (以前の構成を介して) が、レコードの最後に Arreaga があり、コンポーネントをドロップする列と行に配置する必要があります。
このクラスは、他のクラス内で呼び出されます。
private class CustomList extends ListGrid{
//record que hace el drop
private ListGridRecord currentRecord = null;
//elemento que se va a dropear
private Canvas currentCanvas = null;
//private int index;
public CustomList() {
this.setHeight(400);
this.setWidth(400);
this.setCanResizeFields(true);
this.setResizeFieldsInRealTime(true);
this.setShowRecordComponentsByCell(true);
this.setShowRecordComponents(true);
this.setCanAcceptDrop(true);
this.addRecordDropHandler(new RecordDropHandler() {
@Override
public void onRecordDrop(RecordDropEvent event) {
System.out.println("X: " + event.getX());
System.out.println("Y: " + event.getY());
System.out.println("index: " + event.getIndex());
System.out.println("event.getDropRecords() ==> "+ event.getDropRecords());
//guardamo el record y el canvas que se hace el drop
currentRecord = event.getTargetRecord();
currentCanvas = EventHandler.getDragTarget();
}
});
//defino columna ico
ListGridField field = new ListGridField("icon");
ListGridField field2 = new ListGridField("valor");
this.setFields(field, field2);
//añado record para poder aceptar drops
ListGridRecord record = new ListGridRecord();
ListGridRecord record2 = new ListGridRecord();
record.setCanAcceptDrop(true);
record.setAttribute("icon", "Hola");
record.setAttribute("valor", "adios");
record2.setAttribute("icon", "Segundo");
record2.setAttribute("valor", "Segundo Adios");
this.addData(record);
this.addData(record2);
}
//la llamada a createRecordComponent la hace el listgrid al crearse.
@Override
protected Canvas createRecordComponent (ListGridRecord record, Integer colNum) {
System.out.println("record: " + record);
System.out.println("colNum: " + colNum);
System.out.println("currentRecord: " + currentRecord);
if (record.equals(currentRecord)) {
System.out.println("createRecordComponent - REGRESARA: " + currentCanvas);
return currentCanvas;
}
return null;
}
@Override
public Boolean willAcceptDrop(){
return true;
}
@Override
public Canvas updateRecordComponent (ListGridRecord record, Integer colNum, Canvas component, boolean recordChange) {
System.out.println("***************************************************************************************");
System.out.println("Estoy en gridView");
System.out.println("***************************************************************************************");
System.out.println("record es : "+record);
System.out.println("colNum es : "+colNum);
System.out.println("component es : "+component);
System.out.println("recordChange es :"+recordChange);
System.out.println("***************************************************************************************");
return component;
}
}
手伝って頂けますか??