Рисование в JPanel прерывается при удалении JPanel после repaint();

Я пытаюсь создать 2D рендеринг для приложения, которое я кодирую.
Я использую paintComponent для рисования всех изображений в JPanel, и хорошо. Все идет не так.

Прежде всего, я использовал это:

frame.getContentPane().add(p);
frame.getContentPane().validate();
frame.getContentPane().repaint();

Это работало нормально, за исключением того, что кадр был бы перегружен JPanels.

Все отлично работало, когда я использовал это как мой код:

frame.getContentPane().add(p);
frame.getContentPane().validate();
frame.getContentPane().repaint();
frame.getContentPane().list()
System.out.print("\n\n\n");
frame.getContentPane().remove(p);

Что идеально подходит для того, что мне нужно. За исключением того, что я не хотел, чтобы консоль была спамом с тем, что находится на панели содержимого.

Поэтому я решил удалить метод list и сделать это:

frame.getContentPane().add(p);
frame.getContentPane().validate();
frame.getContentPane().repaint();
frame.getContentPane().remove(p);

Вот когда все пошло плохо.

Вот ошибка, которую я получаю.

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: No such child: 1
at java.awt.Container.getComponent(Container.java:302)
at javax.swing.JComponent.rectangleIsObscured(JComponent.java:4340)
at javax.swing.JComponent.paint(JComponent.java:1028)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5139)
at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:302)
at javax.swing.RepaintManager.paint(RepaintManager.java:1188)
at javax.swing.JComponent._paintImmediately(JComponent.java:5087)
at javax.swing.JComponent.paintImmediately(JComponent.java:4897)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:783)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:735)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677)
at javax.swing.RepaintManager.access$700(RepaintManager.java:58)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1593)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:226)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:670)
at java.awt.EventQueue.access$400(EventQueue.java:96)
at java.awt.EventQueue$2.run(EventQueue.java:631)
at java.awt.EventQueue$2.run(EventQueue.java:629)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:640)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)

У кого-нибудь есть предложения по исправлению?

0 ответов

Другие вопросы по тегам