图形不显示在JLayeredPane (java swing)



我正在尝试根据用户输入逐渐建立一个图像。我想做的是创建一堆图形,并将它们添加为图层,但我有一些问题,因为它们不会显示出来。下面是我使用的代码:

public class ClassA 
{
    protected final static int dimesionsY = 1000;
    private static int dimesionsX;
    private static JFrame window;
    private static JLayeredPane layeredPane;
    public void init()
    {
        window = new JFrame("Foo");
        dimesionsX = // some user input
        window.setPreferredSize(new Dimension(dimesionsX, dimesionsY));
        window.setLayout(new BorderLayout());
            layeredPane = new JLayeredPane();
        layeredPane.setBounds(0, 0, dimesionsX, dimesionsY);
        window.add(layeredPane, BorderLayout.CENTER);
            ClassB myGraphic = new ClassB();    
        myGraphic.drawGraphic();
        layeredPane.add(myGrpahic, new Integer(0), 0);
        window.pack();
        window.setVisible(true);
    }
}

public class ClassB extends JPanel
{
    public void drawGraphic()
    {
        repaint();
    }
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        g.setColor(Color.BLACK);
        g.fillRect(10, 10, 100, 100);
    }
}

然而,我的图形似乎没有显示,我不明白为什么。我还尝试先将其添加到JPanel,将JPanel添加到JLayeredPane,但这也不起作用。

有人能帮我一下吗?

如果你添加一个组件到JLayeredPane,它就像添加一个null布局使用容器:你必须完全指定组件的大小和位置。

import java.awt.*;
import javax.swing.*;
public class ClassA {
   protected final static int dimesionsY = 800;
   protected final static int dimesionsX = 1000; //!!
   private static JFrame window;
   private static JLayeredPane layeredPane;
   public void init() {
      window = new JFrame("Foo");
      // !! dimesionsX = // some user input
      //!! window.setPreferredSize(new Dimension(dimesionsX, dimesionsY));
      window.setLayout(new BorderLayout());
      layeredPane = new JLayeredPane();
      //!! layeredPane.setBounds(0, 0, dimesionsX, dimesionsY);
      layeredPane.setPreferredSize(new Dimension(dimesionsX, dimesionsY));
      window.add(layeredPane, BorderLayout.CENTER);
      ClassB myGraphic = new ClassB();
      myGraphic.drawGraphic();
      myGraphic.setSize(layeredPane.getPreferredSize());
      myGraphic.setLocation(0, 0);
      //!! layeredPane.add(myGraphic, new Integer(0), 0);
      layeredPane.add(myGraphic, JLayeredPane.DEFAULT_LAYER);
      window.pack();
      window.setVisible(true);
   }
   public static void main(String[] args) {
      new ClassA().init();
   }
}
class ClassB extends JPanel {
   public void drawGraphic() {
      repaint();
   }
   public void paintComponent(Graphics g) {
      super.paintComponent(g);
      g.setColor(Color.BLACK);
      g.fillRect(10, 10, 100, 100);
   }
}

参见 Java教程中的分层窗格布局组件。

另外,有时需要设置首选大小:

layeredPane.setPreferredSize(new Dimension(width, height));

最新更新