Проще говоря, я пытаюсь использовать ширину компонента, чтобы установить размер его родительского контейнера.Однако ширина, возвращаемая для компонента, отключена примерно на 4 пикселя.
Подробнее: у меня есть диалоговое окно, в котором есть подпанели, растянутые горизонтально по центру.Диалог всегда должен быть таким же широким, как этот список вложенных панелей, и использовать полосу прокрутки, когда список становится слишком длинным.Я попробовал это, просто используя 1 подпанель, хотя для начала.Независимо от того, что я делаю, размер возвращаемой субпанели всегда неверен примерно на 4 пикселя.Я вижу только очень раздражающий 4-пиксельный промежуток справа от моей дополнительной панели, заставляющий мой диалог выглядеть ужасно.Эффект явно усиливается при добавлении дополнительных подпанелей.
То, что я пытался использовать, чтобы получить ширину:
sup-panel.getSize().width;
sub-panel.getBounds().width;
sub-panel.getWidth();
sub-panel.getPreferredSize().width;
Все возвращают одно и то же неправильное значение.
Другие вещи, которые я пробовал вызывать, чтобы заставить его вести себя:
parent.validate();
parent.repaint();
parent.doLayout();
Любая помощь будет оценена.Это намеренно?Я пропускаю какую-то концепцию размеров?Это кажется непротиворечивым, но было бы неплохо, если бы я мог где-то прочитать, что это задокументировано.
К вашему сведению: я использую java 1.3 (с поддержкой устаревшего приложения)
ПРИМЕЧАНИЕ. Это непроблема с получением окна для изменения размера, эта часть происходит просто отлично.И размер подпанелей, кажется, правильно установлен, поскольку изменения его размера отражаются в значениях, возвращаемых для моего кода.Значения просто всегда немного отключены.
ПРИМЕЧАНИЕ2: вызов pack () для родительского контейнера делает окно таким, каким я его хочу, но оно не будет работать для всех сценариев для меня, потому что в конечном итоге после достаточногопанели присутствуют, полоса прокрутки должна будет присутствовать.pack () просто сделает мой диалог очень широким в этом случае и сделает полосу прокрутки бесполезной.
РЕДАКТИРОВАТЬ: Я решил свою проблему.Скорее всего, все мои панели не были одинаковой ширины, как это должно было быть.Есть 2 решения, которые работают.Заставьте их всех быть одинаковыми, что может быть сложно в зависимости от того, насколько вы хороши с макетами.Другой заключается в суммировании отдельных значений ширины первых n панелей, которые я хочу видеть.Обратите внимание, что для того, чтобы это решение работало, мне нужно добавить +1 к ширине для каждого подкомпонента.Не уверен, почему, но я проверил его с различными границами и макетами, и это чрезвычайно последовательно;Я предполагаю, что, возможно, где-то есть пиксель дополнительного пространства, о котором я не думаю достаточно хорошо.Но важно то, что это работает отлично сейчас.Вот пример математики (извините за нетипизированную коллекцию старой школы, требующую приведения, Java 1.3):
int width = 0;
for(int i = 0; i < MAX_VISIBLE_PANELS; i++)
{
width += ((SubPanel)panelList.get(i)).getWidth();
width ++;//extra pixel per panel
}