Вы должны использовать g2
приведение Graphics
, которое вам передано:
Graphics2D g2 = (Graphics2D)g;
Почему бы тебе не попробовать развязать вещи?
class InnerPanel extends JPanel
{
public void paint(Graphics g)
{
Graphics2D g2 = (Graphics2D)g;
g2.drawRect(....);
}
}
class MyLayered extends JLayeredPane()
{
MyLayered()
{
this.add(new InnerPanel(), 14);
}
}
это имеет больше смысла ..
Кроме того, потому что вы пытаетесь сделать что-то, что не соответствует поведению Swing.
Swing сам позаботится о том, чтобы вызывать соответствующие paint
методы над вещами, которые должны отображаться, и чтобы использовать этот протокол, вы должны указать Graphics
объектам, что рисовать, когда Swing запрашивает их у ваших объектов (вызывая paint
) метод, а не когда вы хотите это сделать.
Таким образом, всякий раз, когда Swing хочет нарисовать ваш JLayeredPane
, вы просто рисуете вещи на Graphic
объекте других вещей, не считая, что Swing будет вызывать их соответствующие методы, когда это будет подходящее время.
В заключение: вы не можете нарисовать что-то на Graphic
объекте, когда захотите. Вы можете сделать это только внутри методов, вызываемых Swing, потому что в противном случае Graphics
этих объектов ничего не значит