加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

图形没有在JLayeredPane中显示(java swing)

发布时间:2020-12-15 00:08:45 所属栏目:Java 来源:网络整理
导读:我正在尝试逐步建立基于用户输入的图像.我正在尝试做的是创建一堆图形并将它们添加为图层但是我遇到了一些问题,因为它们不会显示出来.这是我正在使用的代码: public class ClassA { protected final static int dimesionsY = 1000; private static int dime
我正在尝试逐步建立基于用户输入的图像.我正在尝试做的是创建一堆图形并将它们添加为图层但是我遇到了一些问题,因为它们不会显示出来.这是我正在使用的代码:
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,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,就像使用容器将其添加到空布局一样:您必须完全指定组件的大小和位置.

例如.,

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,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,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,100);
   }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读