GridBagLayout: как помешать невидимым компонентам выходить из строя

При создании отдельных компонентов из расположения управляемыми GridBagLayout невидимый, расположение остающихся компонентов в расположении продолжает изменяться. GridBagLayout, кажется, "сворачивает" ячейки с невидимыми компонентами, заставляя другие компоненты сменить положения. Это - очень раздражающее поведение, и я искал способ помешать ему делать это.

Один метод, который я попробовал, путем добавления распорной детали к той же ячейке с фиксированным размером, равным предпочтительному размеру компонента, который может быть скрыт, но если бы тот предпочтительный размер когда-нибудь должен был изменяться, то это была бы большая проблема для хранения распорной детали в синхронизации. Существует ли лучший путь?

На самом деле это не было бы настолько плохо, если GridBagLayout действительно полностью игнорирует ячейки с невидимыми компонентами, но это все еще принимает вставки ячейки во внимание, поэтому если Вы имеете расположение полей ввода и использовали вставки для аккуратного расположения их с регулярными промежуточными разрывами, затем скрытие одного компонента в середине удаляет его из расположения, но оставляет разрыв, который обычно означает окружающий поток компонентов вместе, но с ужасным общедвойным разрывом между ними...

7
задан 21 January 2010 в 10:41
поделиться

4 ответа

string.Format("{0:0.#####}", 0.0030)

или

var money=1.3000m;
money.ToString("0.#####");

В будущем я рекомендую краткий справочник по .NET Format Последовательности Джона Шихана.

-121--2363389-

Hmm, это проблема форматирования дисплея (нули добавляются при преобразовании десятичного числа в последовательность).

Вы должны увидеть, где в коде вы видите конечные нули. Это после вызова .ToString ()? Попробуйте поиграть с различными последовательностями форматирования:

.ToString("#");
.ToString("0.00");
.ToString("#.##");

И так далее. Лучший способ сделать это - просто поэкспериментировать с различными возможными значениями.

-121--2363392-

Как насчет использования JPanel (или Box) в качестве местозаполнителя?
Поместите панель JPanel в каждую ячейку и добавьте компоненты к панелям. Если сделать компонент невидимым, панель все равно должна быть там...

8
ответ дан 7 December 2019 в 01:21
поделиться

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

В качестве альтернативы, вы можете попробовать использовать новый (как java 6) вместо GreyBagLayout - это IMO намного проще в использовании и почти как можно более мощным.

1
ответ дан 7 December 2019 в 01:21
поделиться

Использование Miglayout

, чтобы вернуть радость в макет ^^.

Я также использовал Gridbaglayout в прошлом, и это ужасно. Множество котей котел, и если вы добавите один маленький компонент, макет, скорее всего, ввинчивается.

Еще одна альтернатива использует boxlayout

1
ответ дан 7 December 2019 в 01:21
поделиться

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

0
ответ дан 7 December 2019 в 01:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: