스윙 어플 리케이션을 만들고 있습니다. 움직이는 물체를 응용 한 도로지도의 일종입니다. 내 모양 구성 요소를 두 개의 JPanel
으로 나눕니다. 하나는 정적 구성 요소 JPanel
이고 다른 하나는 동적 구성 요소 JPanel
에 대한 것이며 둘 다 mainPanel에 추가됩니다. 두 패널이 겹쳐져 있으며 동적 구성 요소 패널의 경우 불투명도가 false이므로 패널을 투명하게 만듭니다. 동적 구성 요소 패널에 대해 다시 칠할 때 정적 구성 요소 패널에 대한 다시 칠하기를 트리거합니다. 동적 구성 요소 패널의 모양이 변경되고 정적 구성 요소 패널 모양이 지워져서는 안될 때마다 정적 구성 요소 패널을 다시 칠하고 싶지 않습니다.겹쳐진 패널에 도형 그리기, 고정 패널 그리기 고정 그리기 및 다른 그리기 이동 가능
현재 내 논리는 다음과 같습니다. 의사 코드입니다. 시작시 가동 부품을 맨 위에 그리는 방법과 정적 부품을 한 번 그리는 방법을 알려주십시오.
public class layeredpanel extends JFrame
{
private JPanel contentPane;
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
try
{
layeredpanel frame = new layeredpanel();
frame.setVisible(true);
} catch (Exception e)
{
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public layeredpanel()
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
JPanel panel = new JPanel();
contentPane.add(panel, BorderLayout.CENTER);
panel.setLayout(new OverlayLayout(panel));
final JPanel layer_1 = new layer1();
layer_1.setOpaque(false);
panel.add(layer_1);
JPanel layer_2 = new layer2();
panel.add(layer_2);
Thread thread = new Thread(new Runnable()
{
@Override
public void run()
{
while(true)
{try
{
Thread.sleep(500);
} catch (InterruptedException e)
{
e.printStackTrace();
}
layer_1.repaint();
}
}
});
thread.start();
}
class layer1 extends JPanel
{
@Override
public void paintComponent(Graphics g)
{
// TODO Auto-generated method stub
super.paintComponent(g);
System.out.println("Paint1");
g.setColor(Color.blue);
g.drawRect(30, 20, 40, 40);
}
}
class layer2 extends JPanel
{
@Override
public void paintComponent(Graphics g)
{
System.out.println("Paint2");
// TODO Auto-generated method stub
super.paintComponent(g);
g.setColor(Color.green);
g.fillRect(30, 20, 20, 20);}
}
}
출력 : Paint2
Paint1
Paint2
Paint1
Paint2
Paint1
Paint2
Paint1
Paint2
Paint1
Paint2
Paint1
Paint2
Paint1