【问题标题】:Adding a JPanel to a JLayeredPane causes paints and resizes to have no effect将 JPanel 添加到 JLayeredPane 会导致绘制和调整大小无效
【发布时间】:2012-01-15 00:00:00
【问题描述】:

我正在尝试将一个 JPanel(嗯,几个)添加到 JLayeredPane。但是,当我这样做时,JPanel 的绘制组件方法似乎没有任何效果。下面是一个例子:

import javax.swing.*;
import java.awt.*;

public class Example {

    public static void main(String[] args) {

        // This Works as expected
        JFrame usingPanel = new JFrame();
        JPanel p = new JPanel();
        p.add(new BluePanel());
        usingPanel.setContentPane(p);
        usingPanel.pack();
        usingPanel.setVisible(true);

        // This makes the frame but does not paint the BluePanel
        JFrame usingLayer = new JFrame();
        JLayeredPane l = new JLayeredPane();
        l.setPreferredSize(new Dimension(200,200));
        l.add(new BluePanel(), JLayeredPane.DEFAULT_LAYER);
        JPanel p2 = new JPanel();
        p2.add(l);
        usingLayer.setContentPane(p2);
        usingLayer.pack();
        usingLayer.setVisible(true);
    }


   static class BluePanel extends JPanel{

        public BluePanel(){
            setPreferredSize(new Dimension(200,200));
        }

        @Override
        public void paintComponent(Graphics g){
            super.paintComponent(g);
            g.setColor(Color.BLUE);
            g.fillRect(0, 0, 200, 200);
        }


    }


}

这是为什么?有哪些可能的解决方案?

【问题讨论】:

    标签: java swing jlayeredpane


    【解决方案1】:

    JLayeredPane 没有 LayoutManager,因此您需要自己设置面板的位置和大小。 见tutorial

    【讨论】:

      【解决方案2】:
      1. 您在屏幕上硬编码了尺寸,并且必须从

        g.fillRect(0, 0, 200, 200);
        

        g.fillRect(0, 0, getWidth(), getHeight());
        
      2. (稍作改动)添加方法

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(200, 200);
        }
        

        然后删除代码行setPreferredSize(new Dimension(200,200));

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多