【问题标题】:Java: draw line on JPanel inside JLayeredPaneJava:在 JLayeredPane 内的 JPanel 上画线
【发布时间】:2014-12-06 08:23:42
【问题描述】:
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 上绘图,但没有绘制任何内容。如果我将一个组件(一个 JButton)添加到 p1 或 p2,它将被绘制。

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

【问题讨论】:

    标签: java swing jlayeredpane


    【解决方案1】:

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

    一个好的oracle教程是“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)
    
        }
    
    }
    

    【讨论】:

    • 但是如果我想动态地画线呢?唯一的选择是在 JPanel 类中添加一个“行”数组并调用 repaint()?
    • 是的,确切地说,您的paintComponent 可以引用您在其他地方控制的某些状态(列表、模型等),然后调用repaint()...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 2011-08-05
    • 1970-01-01
    相关资源
    最近更新 更多