#java #swing #jpanel #jcomponent #jlayeredpane
#java #swing #jpanel #jcomponent #jlayeredpane
Вопрос:
Я добавил a JLayeredPane
к a JFrame
. К указанной панели я добавил JComponent
paintComponent(Graphics g)
метод with overloaded, который super.paintComponent(g)
, помимо прочего, вызывает. JComponent
Также имеет setBackground(Color.RED)
и setBounds(0, 0, 100, 100)
в своем конструкторе.
Проблема в том, что, похоже, JComponent
он вообще не рисуется. Однако, если я изменю класс, который расширяется на JComponent
to JPanel
, он будет работать просто отлично.
Имеет ли это значение вообще? Я хотел бы знать, почему это работает таким образом, кажется, что расширение JPanel
, когда я не забочусь о его дополнениях, — это просто ненужные накладные расходы.
Спасибо за ваше время.
Ответ №1:
JComponent также имеет setBackground(Color.RED)
Само по себе это ничего не даст.
У JComponent нет кода рисования по умолчанию, поэтому вызов super.paintComponent() не приведет к рисованию фона.
Если вы хотите нарисовать фон, вам нужно добавить свой собственный пользовательский код рисования:
g.seColor( getBackground() );
g.fillRect(0, 0, getWidth(), getHeight());