Java:在 JLayeredPane 内的 JPanel 上画线

标签 java swing jlayeredpane

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 中绘制的正确方法是什么?

最佳答案

您不能只在外部绘制图形上下文,它并不像您所期望的那样持久。相反,您需要重写 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)

    }

}

关于Java:在 JLayeredPane 内的 JPanel 上画线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27329749/

相关文章:

java - JLayeredPane remove(int) 方法没有抛出这样的子元素

java - 每次迭代多次使用 ArrayList.get() 时是否会对性能产生影响?

java - 将注入(inject)的 EntityManager 传递给 Web session 持久对象

java - Camel Crypto 无法进行 PGP 解密(无效

java - 查找真值组合的数量

java - 为什么 JPanel 下的 JButton 仍然有反应?

java - 覆盖 JTable 的 DefaultTableCellRenderer 以将 JTable 中的所有单元格居中

java - 非法前向引用 netbeans swing

java - 如何从 Pane 中删除这些空间?

Java Swing 混合 Pane