JComponent не отображается в JLayeredPane, JPanel

#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());