0

ScrollPanel にネストされた FlexTable でカスタマイズするために、DialogBox から拡張するクラスを作成しました。問題は、内部にダミー コードを含むスクロール ハンドラ (Window.alert....) があったとしても、イベントがスローされなかったかのように画面に何も表示されないことです。

これまでの私のコードは次のとおりです。

public class LogViewerPopup extends DialogBox {

private DashboardServiceInterfaceAsync myService;

private FlexTable innerTable;


private String tool;
private String version;
private String exec_id;
private String scenario;
private int xPos;
private int yPos;

public LogViewerPopup(DashboardServiceInterfaceAsync myService, String tool, String version, String exec_id, String scenario, int xPos, int yPos) {
    super(true, false);

    this.myService = myService;
    this.tool = tool;
    this.version = version;
    this.exec_id = exec_id;
    this.scenario = scenario;
    this.xPos = xPos;
    this.yPos = yPos;


    this.setStyleName("dialog");
    this.setStyleDependentName("dialogContent", true);
    this.setAnimationEnabled(true);
    this.setGlassEnabled(true);
    this.setText(tool + " - " + scenario + " - " + version);
    //this.setWidget(new Label(tool + " - " + scenario + " - " + version));
    this.setPopupPosition(xPos, yPos);



    myService.getLogs(version, tool, exec_id, scenario, new AsyncCallback<ArrayList<HashMap<String,String>>>() {

        @Override
        public void onSuccess(ArrayList<HashMap<String, String>> result) {

            System.out.println("Debug !");

            innerTable = new FlexTable();
            innerTable.setCellSpacing(0);

            ScrollPanel sp = new ScrollPanel();

            sp.addScrollHandler(new ScrollHandler() {

                @Override
                public void onScroll(ScrollEvent event) {
                    Window.alert("Scrolling !");

                }
            });

            //Headers
            addColumn("ID");
            addColumn("Date");
            addColumn("Scenario");
            addColumn("Module");
            addColumn("Logtype");
            addColumn("Content");
            addColumn("Exec ID");
            addColumn("Executor");
            addColumn("Current Dataset");
            addColumn("Total Datasets");

            //Results
            for(int i = 0 ; i < result.size() ; i++){

                innerTable.setWidget(i + 1, 0, new Label(result.get(i).get("id")));
                innerTable.setWidget(i + 1, 1, new Label(result.get(i).get("date")));
                innerTable.setWidget(i + 1, 2, new Label(result.get(i).get("scenario")));
                innerTable.setWidget(i + 1, 3, new Label(result.get(i).get("module")));
                innerTable.setWidget(i + 1, 4, new Label(result.get(i).get("logtype")));
                innerTable.setWidget(i + 1, 5, new Label(result.get(i).get("content")));
                innerTable.setWidget(i + 1, 6, new Label(result.get(i).get("exec_id")));
                innerTable.setWidget(i + 1, 7, new Label(result.get(i).get("executor")));
                innerTable.setWidget(i + 1, 8, new Label(result.get(i).get("current_dataset")));
                innerTable.setWidget(i + 1, 9, new Label(result.get(i).get("total_datasets")));
            }

            for(int i = 0 ; i < innerTable.getRowCount() ; i++)
                for(int j = 0; j < innerTable.getCellCount(i) ; j ++)
                    innerTable.getCellFormatter().addStyleName(i,j,"FlexTable-Cell");


            applyLineStyle();


            sp.add(innerTable);
            setWidget(sp);

            show();


        }

        @Override
        public void onFailure(Throwable caught) {
            Window.alert("Error generating the LogViewerPopup : " + caught.getMessage());

        }
    });

}

private void applyLineStyle(){

    HTMLTable.RowFormatter rf = innerTable.getRowFormatter();

    for (int row = 1; row < innerTable.getRowCount(); ++row) {
          if ((row % 2) != 0) {
            rf.addStyleName(row, "FlexTable-OddRow");
          }
          else {
            rf.addStyleName(row, "FlexTable-EvenRow");
          }
    }

    rf.addStyleName(0, "FlexTable-HeaderRow");
}

private void addColumn(String text){
    Label label = new Label(text);
    label.setWidth("100%");

    try{
        innerTable.setWidget(0, innerTable.getCellCount(0), label);
    }catch(IndexOutOfBoundsException e){
        innerTable.setWidget(0, 0, label);
    }
}

}

私は必死にこれを最終的に機能させようとしているので、構造の悪いコードに注意を払わないでください ;)

注:ScrollPanelをFocusPanel内にラップすることでスクロールをキャッチできましたが、スクロールバーがどこにあるかを正確に知りたいので、実際には役に立ちません。私はGWT 3.7を使用しています

4

1 に答える 1

0

ScrollPanelに明示的な幅と高さを設定してみてください。

于 2012-08-28T14:39:01.360 に答える