2013-08-22 8 views
0

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

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

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

layeredPane.add(child, 0); 

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

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

+2

Опубликовать [SSCCE] (http://sscce.org/), чтобы мы могли видеть, что вы делаете – MadProgrammer

+0

См. ['Container.add (Component, int)'] (http://docs.oracle.com /javase/7/docs/api/java/awt/Container.html#add%28java.awt.Component,%20int%29). Вот откуда берётся метод, и он не претендует на принятие 'Integer', а' int'. –

ответ

0

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

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

Использовать статическое константное целое поле и читать API JLayeredPane или некоторые примеры использования его в oracle. Это хорошая возможность учиться.

+0

Я пытался использовать JLayeredPane.DEFAULT_LAYER перед публикацией, но оба JLayeredPane.DEFAULT_LAYER и JLayeredPane.PALETTE_LAYER производят такую ​​же неидентифицируемую ошибку. Я думаю, что, наверное, лучше всего, если я закипит это до нескольких строк, чтобы опубликовать весь проблемный источник. – Jorocco

+0

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

+0

Хорошо, что вы сами выяснили, потому что все остальные проблемы были не полезны. Менеджер компоновки - сложная вещь при работе с Swing !! –

0

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

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