Java:在JLayeredPane内的JPanel上绘制线

Java:在JLayeredPane内的JPanel上绘制线,java,swing,jlayeredpane,Java,Swing,Jlayeredpane,我试图在JLayeredPane内的JPanel上绘制,但没有绘制任何内容。如果我向p1或p2添加组件(JButton),它将被绘制 在JLayeredPane内部绘制的正确方法是什么?您不能只在外部绘制图形上下文,它不像您预期的那样持久。相反,您需要覆盖JPanel中的JComponent.paintComponent(图形g)。试试这个。理想情况下,您应该将JPanel子类化为一个单独的类 一个好的oracle教程是“” 但是如果我想动态地画线呢?唯一的选择是在JPanel类中添加一个“行”

我试图在JLayeredPane内的JPanel上绘制,但没有绘制任何内容。如果我向p1或p2添加组件(JButton),它将被绘制


在JLayeredPane内部绘制的正确方法是什么?

您不能只在外部绘制图形上下文,它不像您预期的那样持久。相反,您需要覆盖JPanel中的JComponent.paintComponent(图形g)。试试这个。理想情况下,您应该将JPanel子类化为一个单独的类

一个好的oracle教程是“”


但是如果我想动态地画线呢?唯一的选择是在JPanel类中添加一个“行”数组并调用repaint()?是的,确切地说,您的paintComponent可以引用您在别处控制的某些状态(列表、模型等),然后调用repaint()。。。
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);
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)

    }

}