Я создаю приложение Swing. Это своего рода дорожная карта с применением движущегося объекта. Я разделяю компоненты фигуры на две части: JPanel
. Один из них - статический компонент JPanel
, а второй для динамического компонента JPanel
и оба добавлены в mainPanel. Обе панели перекрываются, а для динамической панели компонентов непрозрачность ложна, чтобы сделать ее прозрачной. Когда я перерисовываюсь для панели динамических компонентов, она также вызывает перерисовку для панели статических компонентов. Я не хочу перерисовывать статическую панель компонентов каждый раз, если есть изменения в форме панели динамических компонентов, а статическая форма панели компонентов не должна быть удалена.Рисование фигур на перекрывающихся панелях, одна панель Draw Стационарная и другая Draw Movable
В настоящее время моя логика, как показано ниже. Это псевдокод. Пожалуйста, помогите мне, как рисовать подвижный компонент верхней части статического компонента и рисовать статический компонент один раз при запуске.
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