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 в целое число.