2014-12-06 3 views
2
JFrame f = new JFrame(); 

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
f.setSize(new Dimension(500,500)); 
JLayeredPane layers = new JLayeredPane(); 
JPanel p1,p2; 

p1=new JPanel(); 
p2=new JPanel(); 


p1.setBounds(0,0,200,200); 
p2.setBounds(0,0,200,200); 

p1.setOpaque(false); 
p2.setOpaque(false); 

layers.setLayer(p1,new Integer(0)); 
layers.setLayer(p2,new Integer(1)); 

layers.add(p1); 
layers.add(p2); 

f.add(layers); 
f.setVisible(true); 


Graphics2D gr = (Graphics2D) p2.getGraphics(); 
gr.setColor(Color.BLACK); 

gr.drawLine(10,10,20,20); 

JLayeredPane 내부에 JPanel을 그리려고하지만 아무 것도 그려지지 않습니다. p1 또는 p2에 컴포넌트 (JButton)를 추가하면 해당 컴포넌트가 그려집니다.Java : JLayeredPane 내의 JPanel에 선을 그립니다.

JLayeredPane 내부를 그리는 올바른 방법은 무엇입니까?

답변

2

그래픽 컨텍스트에 외부로 그릴 수는 없지만 예상 한대로 지속되지는 않습니다. 대신 JPanel에서 JComponent.paintComponent (Graphics g)를 재정의해야합니다. 이 시도. JPanel을 별도의 클래스로 서브 클래 싱하는 것이 이상적입니다.

좋은 오라클 튜토리얼은 "Perform custom painting"

p2=new JPanel() { 
    @Override 
    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     Graphics2D gr = (Graphics2D) g; 
     gr.setColor(Color.BLACK); 

     gr.drawLine(10,10,20,20) 

    } 

} 
+0

하지만 제가 동적으로 선을 그릴하려면? 유일한 옵션은 JPanel 클래스에 "lines"배열을 추가하고 repaint()를 호출하는 것입니다. – user

+0

예, 정확하게, 당신의 paintComponent는 당신이 다른 곳에서 제어하는 ​​어떤 상태 (리스트, 모델 등)를 참조 할 수 있고, repaint()를 호출 할 수 있습니다. – Adam