JLayeredPane z-порядок выпуска

При использовании JLayeredPane для добавления Компонентов в z-порядке я заметил некоторые проблемы:

JLayeredPane lp = getLayeredPane();

JButton top = new JButton(); ...
JButton middle = new JButton(); ...
JButton bottom = new JButton(); ...

Плохо работает

lp.add(top,2);
lp.add(middle,1);
lp.add(bottom,3);

Работает хорошо:

lp.add(top,new Integer(2));
lp.add(middle,new Integer(1));
lp.add(bottom,new Integer(3));

Здесь вы можете увидеть, как это выглядит: http://i.imgur.com/eqH2El8.png

Почему литеральная константа не преобразуется в объект Integer и не работает должным образом?

2 ответа

По сути, потому что класс, который он наследует от (Container), имеет функцию для добавления компонента в заданную позицию в своем списке компонентов (add(Component comp, int layer)), а также функция для добавления компонента с любым заданным аргументом (для передачи в LayoutManager) (add(Component comp, Object constraint)).

Для того, чтобы вызвать правильную функцию (и LayoutManager JLayeredPane для получения ограничения), аргумент должен быть Object Integer а не примитив int,

Почему литеральная константа не преобразуется в объект Integer и не работает должным образом?

Вам нужно посмотреть на API для add(...) метод.

Container В классе есть метод, который принимает "int" в качестве параметра. Это используется для макетов, таких как FlowLayout, где вы можете вставить компонент в указанной позиции.

JLayeredPane У класса есть метод, который принимает значение "Integer", чтобы указать наложение компонента.

Таким образом, вы не можете полагаться на автобокс для преобразования int в целое число.

Другие вопросы по тегам