2013-06-06 1 views
0

У меня есть Java Swing Dialog с скрытый JLabel над каждым входным компонентом (то есть JTextField). Цель этого скрытого JLabel - использовать его как результат проверки для его входного компонента.Java Swing - изменение размера Диалог на JLabel.setVisible (...)

Скажем, есть поле ввода для описания какой-либо сущности, которая должна быть не пустой, и должна содержать некоторые специальные материалы. В случае ошибки, действие может вызвать следующий метод:

private void invalidateDescription(String errMessage) { 
    errDescriptionLabel.setText(errMessage);      
    errDescriptionLabel.setVisible(true); 
    descriptionTextField.setBackground(ERR_COLOR); 
} 

После этого, я называю pack() и invalidate()

Проблема заключается в том, что JDialog по-прежнему имеет тот же размер по вертикали, так что некоторые из компонентов, (кнопки в нижней части диалогового окна) исчезают (потому что они не видны).

У вас есть предложение исправить это?

С наилучшими пожеланиями.

Редактировать: Я не хотел упоминать, что JDialog имеет макет «Free Design» (по умолчанию NetBeans GUI Builder). edit 2: Я ищу решение, которое не требует типа заполнителя для (ошибки) JLabel. «Пустое пространство» не является желательным решением, потому что диалог не выглядит сбалансированным.

+0

Для лучшего ответа потребуется гораздо больше контекста относительно стратегии проверки вашей программы. Рассматривали ли вы добавление панели состояния в макет или с помощью 'InputVerifier'? – trashgod

+2

Swing не делает много скрытых компонентов хорошо. Один из вариантов - иметь один JLabel в верхней части нижней части для всех ваших сообщений об ошибках, хотя вы можете отображать только одно сообщение об ошибке за раз. Другая альтернатива - иметь 3-х столбчатую форму, где третий столбец зарезервирован для сообщений об ошибках. –

ответ

1

Используйте CardLayout поместите ваш labesl и пустым JPanels ans swap thm, если необходимо.

+0

Вы хотите положить стек (CardLayout) метки ошибки и пустую панель над каждым компонентом ввода и, если необходимо, заменить их? Как это решение лучше, чем просто разместить JLabel (для сообщения об ошибке) без текста в нем над входным компонентом и заполнить текст при ошибке? В любом случае проблема остается прежней: у вас есть какой-то заполнитель, так что диалоги выглядят неуравновешенными (странно) -> не желаемое решение – kalamar

+0

CardLayout заботится о пространстве.Карты обмена не меняют пространство, используемое в макете. Вы можете попробовать разместить 2 ярлыка в CardLayout (длинный и короткий) и поменять их. Поэтому размер диалогового окна не изменится, но если нет ошибки, вы увидите пустое место для метки под наполнителем JPanel. – StanislavL

+0

Правильно, и именно это пустое пространство является проблемой (на мой взгляд). – kalamar

1

Вместо того, чтобы использовать setVisible(), дайте errDescriptionLabel цвет фона, соответствующий цвету закрывающей панели, когда запись действительна.

+0

Спасибо. Но взгляните на мой комментарий к StanislavL (см. Выше). Ваше, мое и мое решение (в комментарии выше) по-прежнему требуют своего рода заполнителя (или самого JLabel). Диалог не сбалансирован и выглядит странно. – kalamar

+0

Обновите свой вопрос, чтобы отразить это. – trashgod

1

У меня есть Свинг диалог Java со скрытым JLabel выше каждого входного компонента

Я бы не использовать скрытый компонент для этого. Я хотел бы изменить:

private void invalidateDescription(String errMessage) 

в

private void invalidateDescription(String errMessage, component inputComponent) 

Тогда я бы отобразить всплывающее окно с сообщением об ошибке. Вы можете использовать нерисованный JDialog в качестве всплывающего окна. Вы даже можете использовать JPopupMenu в качестве всплывающего окна.

Когда вы показываете всплывающее окно, вы можете поместить всплывающее окно в исходный компонент.

 Смежные вопросы

  • Нет связанных вопросов^_^