Ошибка JLayeredPane, когда слой является целым числом

У меня есть объект подкласса Canvas, который я пытаюсь добавить вместе с некоторыми другими подклассами Canvas в JLayeredPane. В документации для JLayeredPane слой задается как целое число, например.

layeredPane.add(child, new Integer(0));

Однако, когда я использую целое число для слоя, я получаю какую-то ошибку времени выполнения. (Я не могу точно сказать, что это за ошибка, потому что моя IDE продолжает жаловаться на отсутствие источника для библиотек Swing.) Как ни странно, когда я использую следующую форму:

layeredPane.add(child, 0);

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

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


person Jorocco    schedule 22.08.2013    source источник
comment
Опубликуйте SSCCE, чтобы мы могли видеть, что вы делаете   -  person MadProgrammer    schedule 23.08.2013
comment
См. Container.add(Component,int). Вот откуда берет начало метод, и он утверждает, что принимает не Integer, а int.   -  person Andrew Thompson    schedule 23.08.2013


Ответы (2)


К сожалению, я не могу добавить комментарий, поэтому я оставлю ответ. Если вы работаете с IDE, вы можете использовать форму дизайна, чтобы легко создать свой графический интерфейс, просто перетащите что-то....

Я работал с JLayeredPane, и если вы добавите к нему компонент, вы можете использовать метод добавления вручную, например layeredPane.add(Component, javax.swing.JLayeredPane.PALETTE_LAYER); или layeredPane.add(Component, javax.swing.JLayeredPane.DEFAULT_LAYER);

Используйте статическое постоянное поле Integer и прочитайте API JLayeredPane или несколько примеров его использования в оракуле. Это хорошая функция для изучения.

person H-Patel    schedule 22.08.2013
comment
Я пытался использовать JLayeredPane.DEFAULT_LAYER перед публикацией, но и JLayeredPane.DEFAULT_LAYER, и JLayeredPane.PALETTE_LAYER выдают одну и ту же неидентифицируемую ошибку. Я думаю, что будет лучше, если я сократлю это до примера из нескольких строк, чтобы я мог опубликовать весь проблемный источник. - person Jorocco; 23.08.2013
comment
Эта ошибка как-то связана с тем, что я использовал BorderLayout на JLayeredPane. Ошибка исчезла, когда я перешел на другую раскладку. - person Jorocco; 23.08.2013
comment
Хорошо, что ты сам разобрался, потому что все остальные неисправности не помогали. Менеджер компоновки - сложная вещь при работе с Swing! - person H-Patel; 23.08.2013

Эта ошибка как-то связана с тем, что я использовал BorderLayout на JLayeredPane. Ошибка исчезла, когда я перешел на другую раскладку.

person Jorocco    schedule 02.09.2013