【问题标题】:Adding multiple objects to JFrame without using a LayoutManager在不使用 LayoutManager 的情况下向 JFrame 添加多个对象
【发布时间】:2021-06-27 07:01:52
【问题描述】:

有没有办法在不使用布局管理器的情况下将对象添加到 JFrame?我有我试图添加到 JFrame 的平铺对象(用于游戏 2048),因此我可以调用 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);
        } 

【问题讨论】:

  • 永远有一个循环 - 不要使用无限循环。对于动画,您应该使用Swing Timer我可以按箭头使它们移动 - 你怎么知道要移动哪个图块?通常,对于要绘制多个对象的游戏,您会使用自定义绘制。签出:stackoverflow.com/questions/54028090/…。这不是一个游戏,但它演示了一个带有动画的摇摆计时器。
  • @camickr 我稍后会解决这个问题,但现在我对如何将对象添加到 JFRame 很感兴趣,谢谢
  • 创建绘图JPanel,并在绘图JPanel上绘制2048个正方形。创建你的瓦片值的逻辑模型,并根据逻辑模型在绘图JPanel上绘制瓦片。如果这令人困惑,请查看我在 GitHub 上的 2048 game
  • 好的,谢谢大家,会试试

标签: java swing object jframe layout-manager


【解决方案1】:

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

查看这些优质资源:

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

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

【讨论】:

  • 仅仅因为你可以做某事,并不意味着你应该做某事。 Swing 旨在与layout managers 一起使用。
猜你喜欢
  • 2012-09-24
  • 2012-06-06
  • 2013-04-25
  • 1970-01-01
  • 2020-10-23
  • 1970-01-01
  • 1970-01-01
  • 2015-12-27
  • 1970-01-01
相关资源
最近更新 更多