У меня есть настройка, которая обычно работает, но я нахожу ее немного болью в данный момент.JDialog не учитывает размеры дочерних компонентов
У меня есть JDialog
(ранее JFrame
, но я изменил поток пользовательского интерфейса в последнее время для удаления избыточной JFrames
) установлен в BorderLayout, который содержит три основных JPanels
, заголовок, содержание и колонтитул.
В заголовке JPanel
есть фоновое изображение, которое прекрасно загружается. Тем не менее, я называю все виды setMinimumSize
/setPreferredSize
/и т. Д. (Я даже пробовал setSize
и setBounds
из отчаяния), а JPanel
не подбирается правильно. Макет для этого компонента - BoxLayout
, и дети удобно сидят внутри него, но это не должно влиять на то, что я пытаюсь сделать с самой панелью заголовков.
Единственное, что работает, это установить размер родителя JDialog
. Но я не хочу этого делать/из того, что я читал, это кажется плохим дизайном. Я также должен MATHS на потенциальную ширина/высота всех детей, добавьте поля и т.д.
Advice Я не ищет: «использовать другой LayoutManager
.»
I хочу понять, есть ли причина, по которой дочерние компоненты не соблюдаются.
Я могу предоставить код, но изоляция небольшого, выполняемого сегмента затруднена с учетом количества взаимосвязанных систем, которые я жонглирую. Вот соответствующий фрагмент, чтобы установить размер JPanel
. Размеры изображения 480 * 96.
public JPanelThemed(BufferedImage image) {
super();
this.backgroundImage = image;
setAllSimilarConstraints(new Dimension(image.getWidth(), image.getHeight()));
setOpaque(false);
}
// for use with BoxLayout as it requires explicit bounds to be set
public void setAllSimilarConstraints(Dimension dim) {
setPreferredSize(dim);
setMinimumSize(dim);
setMaximumSize(dim);
}
'Я могу предоставить код, но изолировать небольшой, выполняемый сегмент сложно, учитывая количество взаимосвязанных систем, которые я жонглирую' - ну проблема, вероятно, где-то в этом коде, и мы понятия не имеем, что это за код. 'Я вызываю всевозможные setMinimumSize/setPreferredSize/etc' - Do not. Вам не нужно вручную ссылаться на эти методы. Задача менеджера компоновки заключается в определении правильного размера и расположения компонентов на панели. – camickr
Что мы хотим - это [минимальная запущенная примерная программа] (http://stackoverflow.com/help/mcve). Это утверждение: «Я могу предоставить код, но изолировать небольшой, выполняемый сегмент сложно, учитывая количество взаимосвязанных систем, которые я жонглирую». «- предполагает, что вы сделаете сами и пользуетесь нами, реорганизовывая свой код, чтобы уменьшить циклическая сложность (это то, что вы описываете «Т»). Сделайте это, и вы, скорее всего, найдете проблему, вызвавшую вашу проблему выше, или если нет, затем опубликуйте небольшую управляемую программу для тестирования. –
Итак, автоматический ответ - это честное голосование и говорит мне предоставить программный код для всей программы? Мне очень жаль, но я не понимаю этот менталитет, который пронизывает SO, что я видел слишком часто как lurker, неважно, задавая вопросы сам. Мы все программисты здесь, я прошу * знания * о 'JDialog', и если люди знают, как он обрабатывает размер компонента. В противном случае, 'BorderLayout'. – Gorbles