java - 在不使用 LayoutManager 的情况下向 JFrame 添加多个对象
问题描述
有没有办法在不使用布局管理器的情况下将对象添加到 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);
}
解决方案
可以在没有 LayoutManager 的情况下使用 Swing。不使用 LayoutManager 允许并要求应用程序完全控制组件的绝对位置。
查看这些优质资源:
简而言之,创建一个没有布局管理器的容器包括以下步骤:
- 通过调用 setLayout(null) 将容器的布局管理器设置为 null。
- 为容器的每个子级调用 Component 类的 setBounds() 方法。
- 调用 Component 类的 repaint() 方法。
推荐阅读
- c++ - 我只能在 for 循环内访问向量的元素
- sql - PostgreSQL - max(count()) 与 group by 的聚合
- c++ - 如何包含 getline?
- javascript - 使用 javascript 的可拖动 flexbox 滑块可以工作但会抖动
- openssl - 如何使用带有 openSSL 而不是通用名称的 SAN?
- c# - 为什么我的 .UWP 模拟器无法在 Visual Studio 中启动?
- javascript - 使用异步 API 调用的无效挂钩调用
- express - Stripe Checkout 不会重定向到 Express 结帐页面
- pyspark - 如何在 Databricks 笔记本中禁用广播?
- asp.net-core - Angular 11,HMR,错误的模式集,在带有 UseSpa 的 asp.net 核心应用程序后面使用时