Подтвердить что ты не робот

Как править выравнивающие кнопки на горизонтальной панели (GWT)

Я пытаюсь реализовать простой диалог. Я бы хотел, чтобы кнопки ОК и отмены были выровнены прямо в нижней части диалогового окна. Я вставляю кнопки в HorizontalPanel и пытаюсь установить горизонтальное выравнивание вправо. Однако это не работает. Как сделать кнопки правильными? Спасибо. Вот фрагмент:

private Widget createButtonsPanel() {
    HorizontalPanel hp = new HorizontalPanel();
    hp.setCellHorizontalAlignment(saveButton, HasHorizontalAlignment.ALIGN_RIGHT);
    hp.setCellHorizontalAlignment(cancelButton, HasHorizontalAlignment.ALIGN_RIGHT);
    hp.add(saveButton);
    hp.add(cancelButton);       

    return hp;
}
4b9b3361

Ответ 1

Цель состоит в том, чтобы называть setHorizontalAlignment до добавление ваших кнопок, как показано ниже:

final HorizontalPanel hp = new HorizontalPanel();
final Button saveButton = new Button("save");
final Button cancelButton = new Button("cancel");

// just to see the bounds of the HorizontalPanel
hp.setWidth("600px");
hp.setBorderWidth(2);

// It only applies to widgets added after this property is set.
hp.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);

hp.add(saveButton);
hp.add(cancelButton);

RootPanel.get().add(hp);

Если вы хотите, чтобы ваши кнопки были плотно друг с другом, поместите их в какой-нибудь новый контейнер, и они помещают контейнер внутри правой горизонтальной панели

Ответ 2

Добавление еще одного совета к этой теме: если вы используете UiBinder для размещения своих панелей, вам будет сложно выяснить, как установить свойство выравнивания до добавления каких-либо виджетов на панель. Кроме того, используя атрибут bean непосредственно на панели, например...

<g:HorizontalPanel horizontalAlignment="ALIGN_RIGHT">
    ....
</g:HorizontalPanel>

... не работает. Хитрость? Обмотайте всех дочерних элементов DockPanel, HorizontalPanel или VerticalPanel, которые необходимо установить для выравнивания в элементе <g:cell>:

<g:HorizontalPanel>
    <g:cell width="800px" horizontalAlignment="ALIGN_RIGHT">
        <g:Button ui:field="closeButton" text="Close" />
    </g:cell>
</g:HorizontalPanel>

Обратите внимание, что в большинстве случаев вам, вероятно, потребуется установить "ширину", а также выравнивание, если вы используете это на горизонтальной панели, и наоборот. Подробнее см. Javadoc для CellPanel.

Ответ 3

Вот еще один пример использования UIBinder, который должен работать:

<g:VerticalPanel>
 <g:HorizontalPanel width="100%">
  <g:cell horizontalAlignment="ALIGN_RIGHT" width="100%">
   <g:Button ui:field="cancelButton" text="Cancel"/>
  </g:cell>
  <g:cell horizontalAlignment="ALIGN_RIGHT">
   <g:Button ui:field="okButton" text="Ok"/>
  </g:cell>
 </g:HorizontalPanel>
</g:VerticalPanel>

Ответ 4

Возможно, вы захотите использовать Firebug для проверки экстентов самой HorizontalPanel. Возможно, вам понадобится

hp.setWidth("100%");

Горизонтальная панель, как правило, сама по себе относится к содержимому, поэтому, если вы поместите в нее пару кнопок, она будет выровнена влево, так как сама таблица не будет расширяться.

Ответ 5

Вы также можете использовать setCellHorizontalAlignment на панели, содержащей HorizontalPanel. Это то, что я делаю.

// doesn't necessarily have to be a vertical panel
VerticalPanel container = new VerticalPanel();
HorizontalPanel buttons = new HorizontalPanel();
// add the buttons
container.add(buttons);
container.setCellHorizontalAlignment(buttons, HasHorizontalAlignment.ALIGN_RIGHT);

Ответ 6

Лучший способ заставить элементы управления выравнивать вправо или влево - написать две строки CSS следующим образом:

.buttonToRight {
    float: right;
    right: 100%;
}

а затем назначьте их элементу управления следующим образом:

HorizontalPanel hpButtons = new HorizontalPanel();
hpButtons.addStyleName("buttonToRight");

Ответ 8

Довольно поздно ответить, но просто хочу упомянуть для записи, что значение ширины настройки очень важно (как уже указывал bikesandcode), иначе это может не сработать.

После меня работали,

<g:HorizontalPanel width="100%">
   <g:cell horizontalAlignment="ALIGN_RIGHT">
      <g:Button ui:field="buttonOK" text="OK"/>
   </g:cell>
</g:HorizontalPanel>

Ответ 9

Для пользователей UIBinder я хочу расширить @Peter Wagener ответ немного больше.

Как сказал @Peter Wagener, следующее не работает. (Я считаю, что это ошибка.)

<g:HorizontalPanel horizontalAlignment="ALIGN_RIGHT">
    ....
</g:HorizontalPanel>

Здесь я привел пример для работы (несколько кнопок).

<g:HorizontalPanel>
    <g:cell width="800px" horizontalAlignment="ALIGN_RIGHT">
        <g:Button ui:field="saveButton" text="Save" />
    </g:cell>
    <g:cell horizontalAlignment="ALIGN_RIGHT">
        <g:Button ui:field="closeButton" text="Close" />
    </g:cell>
</g:HorizontalPanel>

Примечание:

  • Первая ячейка должна иметь достаточно большую ширину.
  • Не назначайте какую-либо ширину остальным ячейкам, чтобы между первой и второй кнопками не было пробелов.

Ответ 10

Попробуйте сначала добавить кнопки, а затем вызовите hp.setHorizontalAlignment("your aligment here").

Удачи!