При создании отдельных компонентов из расположения управляемыми GridBagLayout невидимый, расположение остающихся компонентов в расположении продолжает изменяться. GridBagLayout, кажется, "сворачивает" ячейки с невидимыми компонентами, заставляя другие компоненты сменить положения. Это - очень раздражающее поведение, и я искал способ помешать ему делать это.
Один метод, который я попробовал, путем добавления распорной детали к той же ячейке с фиксированным размером, равным предпочтительному размеру компонента, который может быть скрыт, но если бы тот предпочтительный размер когда-нибудь должен был изменяться, то это была бы большая проблема для хранения распорной детали в синхронизации. Существует ли лучший путь?
На самом деле это не было бы настолько плохо, если GridBagLayout действительно полностью игнорирует ячейки с невидимыми компонентами, но это все еще принимает вставки ячейки во внимание, поэтому если Вы имеете расположение полей ввода и использовали вставки для аккуратного расположения их с регулярными промежуточными разрывами, затем скрытие одного компонента в середине удаляет его из расположения, но оставляет разрыв, который обычно означает окружающий поток компонентов вместе, но с ужасным общедвойным разрывом между ними...
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 в каждую ячейку и добавьте компоненты к панелям. Если сделать компонент невидимым, панель все равно должна быть там...
Одной из возможностей будет использоваться вложенные панели с помощью Cardlayout , чтобы скрыть компоненты, а не установить их для невидимого. Cardlayout приводит к тому, что панель всегда имеет размер самой большой «карты».
В качестве альтернативы, вы можете попробовать использовать новый (как java 6) вместо GreyBagLayout - это IMO намного проще в использовании и почти как можно более мощным.
Использование Miglayout
, чтобы вернуть радость в макет ^^.
Я также использовал Gridbaglayout в прошлом, и это ужасно. Множество котей котел, и если вы добавите один маленький компонент, макет, скорее всего, ввинчивается.
Еще одна альтернатива использует boxlayout
IIRC, то, что я делал в прошлом, это помещал компонент в контейнер (или использовал отдельный компонент), имитирующий размеры оригинального компонента, а не то, является ли он скрытым состоянием. Сделайте это методом или фасадом в сетчатый мешок, и ваш макетный код может остаться красивым и чистым.