JOptionPane с несколькими входами в разных строках

Я хотел бы создать JOptionPane, который позволяет пользователю выбирать IP-адрес и порт для подключения. Она должна быть структурирована так,

IP-адрес: [текстовое поле здесь]

Порт: [текстовое поле здесь]

Отмена ОК

Метки должны быть выровнены по левому краю, и текстовые поля также должны быть выровнены по левому краю. Я не могу смоделировать здесь раскадровку, но в основном текстовые поля не должны быть смещены, даже если между метками и текстовыми полями есть пробел.

Каждая пара метки и текстового поля должна располагаться на отдельных строках, а кнопки «Отменить ОК» должны быть выровнены по правому краю под текстовыми полями.

Есть ли способ сделать это в коде?


person swiftcode    schedule 31.05.2012    source источник
comment
Что вы пробовали?   -  person user1329572    schedule 31.05.2012
comment
@user1329572 user1329572 Я пробовал код из здесь, но это помещает все поля в одно и то же строку и смещает кнопки «Отмена» и «ОК».   -  person swiftcode    schedule 31.05.2012


Ответы (2)


См. этот пример, который кажется похожим по макету.

Пример

Выровнять по правому краю

По правому краю текст в метках выравнивается, что, на мой взгляд, выглядит лучше, используя это:

labels.add(new JLabel("User Name", SwingConstants.RIGHT));

Для текста с выравниванием по левому краю измените его на:

labels.add(new JLabel("User Name"));

Улучшение

Это делается с использованием вложенного макета, GridLayout экземпляров в WEST и CENTER BorderLayout.

Это может быть лучше сделать с использованием более мощного макета, такого как MigLayout, или более современного макета J2SE, такого как BoxLayout или GroupLayout.

GroupLayout может обеспечить тип выравнивания, необходимый этому пользовательскому интерфейсу, при этом не растягивая поля CENTER до той же ширины (что также можно исправить во вложенном макете, как указано выше, но требует еще 2 ограничивающих панели). Я полагаю, что двое других тоже могли бы справиться с этой работой, но у них не так много опыта работы с ними.

person Andrew Thompson    schedule 31.05.2012
comment
Я всегда знал, что у вас есть этот пример :-), просто не мог найти его в моем поиске +1 для этого - person nIcE cOw; 31.05.2012
comment
@nIcEcOw (смеется) Единственная причина, по которой я смог найти это в поиске, это то, что это было недавно. - person Andrew Thompson; 31.05.2012
comment
@mKorbel Просто пытаюсь спасти электронную планету. При создании этого сообщения ни один электрон не пострадал (хотя некоторые доставили небольшие неудобства). - person Andrew Thompson; 31.05.2012

Создайте собственный диалог (jdialog) или используйте JOptionPane.showInputDialog, см. этот учебник:

http://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html

person gustavogabr    schedule 31.05.2012