커스텀 JLayeredPane을 사용하고 있습니다. JLayeredPane의 여러 레이어에 그려야하는 여러 도형이 있습니다.드로잉 할 때 자바 스윙 NullPointerException이 발생했습니다.
이것을 테스트하려면 JPanel을 만들고 그래픽을 요청하십시오. 그런 다음 JPanel (그래픽 준비)에 테스트 사각형을 그립니다. JLayeredPane의 paintComponent 메소드에서 마침내 모든 것을 그립니다. 그러나 이것은 실패합니다 (NullPointerException).
public class MyCustomPanel extends JLayeredPane {
// test
JPanel testpane;
Graphics g2;
// test
// constructor
public MyCustomPanel() {
testpane = new JPanel();
this.add(testpane, new Integer(14));
g2 = testpane.getGraphics();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g2.drawRect(10, 10, 300, 300);
}
}
// run:
//Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
// at view.MyCustomPanel.paintComponent(MyCustomPanel.java:65)
이유는 무엇의 JLayeredPane 내에서 이러한 JPanel의에 그릴 수 없습니다? 내 paintComponent 메소드 내에서 직접 JLayeredPane에 그릴 수는 있지만 JLayeredPane의 기본 패널에 있습니다. 내 JLayeredPane에 추가 된 여러 레이어를 만들고 그릴 필요가 있습니다.
내가 뭘 잘못하고 있니? : s
하지만 JLayredPane의 그래픽이 사용되며 내 JPanel은 사용되지 않습니다. 그래서 나는 내 JPanel이 아닌 내 JLayredPane을 그릴 것입니까? : s – juFo
@ 왜 당신은 디커플링을 시도하지 않습니까? 저는 이것을 분리하고 싶지 않습니다. 커스텀 JPanel를 작성하지 않고 JPanel의 JLayredPane 내에서 어떻게 그릴 수 있습니까? : s – juFo
그러면 객체 지향 프로그래밍에 대해 두 번 생각해 봐야합니다. 왜 스스로 외부에 객체의 사용자 지정 그리기를 구현해야합니까? 이것은 말이 안된다. 5 가지 패널로 무엇을 할 것인가? 모든 그래픽 객체를 저장하고 계층화 된 pane의 paintComponent에 그립니다. – Jack