微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在不使用 LayoutManager 的情况下向 JFrame 添加多个对象

如何解决在不使用 LayoutManager 的情况下向 JFrame 添加多个对象

有没有办法在不使用布局管理器的情况下向 JFrame 添加对象?我有瓷砖对象(用于游戏 2048),我正试图将它们添加到 JFrame,这样我就可以调用 JFrame,然后永远循环,瓷砖永远重新绘制自己,我可以按箭头使它们根据约束移动(就像它可以朝特定方向移动一样。

为什么我不想使用特定的布局管理器 - 我的对象是游戏 2048 中的图块 - 这意味着它们会不断改变位置,这会干扰布局管理器设置,即所有 JPanel 对象都在一个流布局中具体顺序和位置。

这里是我尝试实例化 JFrame 的地方:

   public static void main(String[] args) throws InterruptedException {
       //set up JFrame,tile objects
       frame = new JFrame();
        a = new tile(100,100,frame);
        b = new tile(200,200,frame);
       frame.addKeyListener(a);
        frame.add(a); 
        frame.add(b);


        frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(false);

               


        frame.setSize(500,500);
        frame.setVisible(true); 
        //a loop so that it is continuously repainting and when i press a key something else happens
        while(true) {
            a.repaint();
            b.repaint();
            Thread.sleep(10);
        } 

解决方法

可以在没有 LayoutManager 的情况下使用 Swing。不使用 LayoutManager 允许并要求应用程序完全控制组件的绝对位置。

查看这些优质资源: https://docs.oracle.com/javase/tutorial/uiswing/layout/none.html Java swing GUI absolute positioning

简而言之,创建一个没有布局管理器的容器包括以下步骤:

  • 通过调用 setLayout(null) 将容器的布局管理器设置为 null。
  • 为容器的每个子项调用 Component 类的 setBounds() 方法。
  • 调用 Component 类的 repaint() 方法。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。