0

以下は、ユーザーがそれぞれのボタンをクリックしたときに単純なDialogBoxをポップアップする2つの内部クラスです。次に、インターフェイスのリストボックスに入力されるリストの値を更新します。

ほとんどの場合、ダイアログボックスはリストボックスの現在のインデックス/選択された値と同じ数のコピーをポップアップするように見えますが、常にそうとは限りません。時々、1つのダイアログだけがポップアップします。何か案は?必要に応じて、より多くのコードを提供できます。

    public class EditCustomerHandler implements ClickHandler {
        public EditCustomerHandler() {}
        public void onClick(ClickEvent event) {

            final DialogBox editCustDialog = new DialogBox();
            editCustDialog.setHTML(customer.getName());

            FlexTable content = new FlexTable();
            FlexTable buttonPanel = new FlexTable();
            final TextBox customerNameTextBox = new TextBox();
            content.setText(0, 0, "Name: ");
            content.setWidget(0, 1, customerNameTextBox);

            Button saveButton = new Button("Save");
            saveButton.addClickHandler(new ClickHandler() {
                public void onClick(ClickEvent event) {
                    if (!customer.getName().equals(customerNameTextBox.getText())) {
                        customer.setName(customerNameTextBox.getText());
                        editCustDialog.hide();
                        stationService.saveCustomer(customer, new DefaultAsyncCallback<String>() {
                            public void onSuccess(String errorCode) {
                                if (errorCode != null) {
                                    MessageBox.showMessage("Error", errorCode);
                                    return;
                                }
                                refreshCusts();

                            }
                        });
                    }
                    }               
            });
            Button cancelButton = new Button("Cancel");
            cancelButton.addClickHandler(new ClickHandler() {
                public void onClick(ClickEvent event) {
                    editCustDialog.hide();                  
                }               
            });

            buttonPanel.setWidget(0, 0, saveButton);
            buttonPanel.setWidget(0,1, cancelButton);
            content.getFlexCellFormatter().setColSpan(1, 0, 2);
            content.getCellFormatter().setHorizontalAlignment(1,0, HasHorizontalAlignment.ALIGN_CENTER);
            content.setWidget(1,0, buttonPanel);
            editCustDialog.add(content);
            editCustDialog.center();
            editCustDialog.setGlassEnabled(true);
            editCustDialog.setModal(false);
            editCustDialog.show();

        }
    }

    public class PlusCustomerHandler implements ClickHandler {
        public PlusCustomerHandler() {}
        public void onClick(ClickEvent event) {
            final DialogBox plusCustDialog = new DialogBox();
            plusCustDialog.center();
            plusCustDialog.setModal(false);
            plusCustDialog.setGlassEnabled(true);
            plusCustDialog.setHTML("New Customer");
            final TextBox customerNameTextBox = new TextBox();
            final FlexTable content = new FlexTable();
            final FlexTable buttonPanel = new FlexTable();
            final Button saveButton = new Button("Save");
            saveButton.addClickHandler(new ClickHandler() {
                public void onClick(ClickEvent event) {
                    if (!customerNameTextBox.getText().equals("")) {
                    SMSCustomer newCustomer = new SMSCustomer();
                    newCustomer.setName(customerNameTextBox.getText());
                    stationService.saveCustomer(newCustomer, new DefaultAsyncCallback<String>() {
                        public void onSuccess(String errorMsg) {
                            if (errorMsg == null) {
                                refreshCusts();
                                plusCustDialog.hide();
                            }
                        }

                    });
}
                    else {
                        MessageBox mb = new MessageBox();
                        mb.showMessage("Yo dawg", "Customers must have names!");

                    }
                    }});

            Button cancelButton = new Button("Cancel");
            cancelButton.addClickHandler(new ClickHandler() {
                public void onClick(ClickEvent event) {
                    plusCustDialog.hide();                  
                }               
            });

            content.setText(0, 0, "Name: ");
            content.setWidget(0, 1, customerNameTextBox);
            buttonPanel.setWidget(0, 0, saveButton);
            buttonPanel.setWidget(0,1, cancelButton);
            content.getFlexCellFormatter().setColSpan(1, 0, 2);
            content.getCellFormatter().setHorizontalAlignment(1,0, HasHorizontalAlignment.ALIGN_CENTER);
            content.setWidget(1,0, buttonPanel);
            plusCustDialog.add(content);


            plusCustDialog.show();
            }
        }
4

1 に答える 1

1

.onClick()クラスのメソッド内にダイアログを作成します。ダイアログにfinalを追加したことに注意してください。ただし、saveButtonとcancelButtonに新しいClickHandlerが複数回追加されないという意味ではありません。.onClick()実際、このメソッドがトリガーされるたびに、このDialogBoxを作成します。

より良いアプローチは次のようなものです:

DialogBox editCustDialog;

public void onClick(ClickEvent event) {
    if (editCustDialog == null) {
        buildEditCustDialog();
    }
    editCustDialog.show(); // or, editCustDialog.center();
}

private void buildEditCustDialog() {
    editCustDialog = new DialogBox();
    // etc.
}
于 2012-12-26T03:40:40.753 に答える