Итак, в недавнем ответе кто-то прокомментировал это (в отношении живописи):
"Вероятно, это какая-то болезнь 90% программистов Swing: когда они создают свой собственный компонент, они всегда расширяют JPanel вместо JComponent. Почему?"
Я все еще довольно новичок в программировании, поэтому считаю, что слишком рано называть себя программистом Swing, поскольку мне еще предстоит найти свою нишу. Но переопределение JPanel
- это то, как меня учили. Поэтому я решил найти ответ на вопрос "Почему?". вопрос комментатора. Вот некоторые из ответов, которые я нашел.
Фоновая картинка - основное отличие. Класс JComponent не создает свой фон, поэтому вам нужно нарисовать фон в переопределенном методе paintComponent. Напротив, JPanel имеет непрозрачный фон, который можно нарисовать, вызвав его метод paintComponennt.
Вместо расширения JComponent некоторые программисты предпочитают расширять класс JPanel. JPanel предназначен для контейнера, который может содержать другие компоненты, но также можно рисовать на нем. Есть только одно отличие. Панель непрозрачна, что означает, что она несет ответственность за покраску всех пикселей в пределах ее границ. Самый простой способ добиться этого - нарисовать панель цветом фона, вызвав super.paintComponent в методе paintComponent для каждого подкласса панели:
Если для свойства opaque установлено значение true... тогда системе рисования Swing не нужно тратить время на рисование за компонентом, следовательно, улучшает производительность.
Я думаю, что последняя цитата действительно объясняет это лучше всего. Но помимо непрозрачности существуют и другие полезные причины: "90% программистов Swing имеют эту болезнь" расширения JPanel
, а не JComponent
?