当前位置: 首页 > 知识库问答 >
问题:

添加/更改影响父级设置界限的JLabels

巫马昆杰
2023-03-14

我对Java还是个初来乍到的人,我很喜欢和它混在一起,所以请你在这件事上跟我幽默一下。我知道布局管理器,但我对摆动的机制感兴趣,所以我使用绝对定位。如有任何见解,将不胜感激。

所以我注意到在JPanel中添加JLabel时出现了一个令人讨厌的行为。例如,如果我这样设置它:

JFrame frame=new JFrame("Test Frame");
frame.setSize(800,500);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable (false);
JPanel conPane=new JPanel();
conPane.setLayout(null);
frame.setContentPane(conPane);
conPane.setBounds(0,0,1600,1000);
conTP.setFocusable(true);
frame.setVisible(true);

所以现在我把康潘面板...

conPane.setBounds(-200,-200,1600,1000);

然后制作一个新的JLabel....

ImageIcon ico=new ImageIcon("directory/testimage.gif");
JLabel myLabel=new JLabel(ico);myLabel.setLayout(null);
myLabel.setBounds(300,300,200,200);

把它加到康帕内...

conPane.add(myLabel);

然后它就会把康帕纳调回到它的起始位置。在没有我的允许的情况下,实际上做了一些限制(0,0,160,100);

如果我移动一个标签,改变它的图标,或者几乎做任何涉及改变Conpane的孩子的事情,也会发生这种情况。

我怎么才能阻止它?

共有1个答案

林弘文
2023-03-14

然后它就会把conPane重置到它的起始位置

本质上,那是错误的。这是错误的,因为你的假设是错误的:你假设

contPane.setBounds(....)

但实际上没有效果:负责布局组件的layoutManager是其父组件的manager(在本上下文中是RootPaneLayout,您绝对不想搞砸)。该管理器将其设置为框架的大小(-insets-menubar),无论您做什么。您可以通过在ContentPane中设置边框来将其可视化:

contPane.setBorder(BorderFactory.createLineBorder(Color.RED, 5)); 

在一天结束的时候,完全没有办法学习所有关于布局的知识,即使你坚持不使用它来浪费时间。

 类似资料:
  • 问题内容: 是否可以更改流程父级? 例如:父母A有孩子B,我可以使父母B是不杀死A的Init进程吗? 问题答案: 并非来自流程B的外部。 在流程B内部,您可以调用fork来复制您的流程,然后让原始副本退出。发生这种情况时,新副本B2将不是A的子级,其父级将被设置为1(初始化过程)。

  • 我的反应结构是 在中有一个按钮,单击该按钮可通过家长向其兄弟姐妹发送消息。第一个孩子- 应用程序 选择研究 参与者表-这需要接收某个变量,例如在其状态中的

  • 问题内容: 我试图制作一个由两个输入字段组成的登录表单,并带有插入填充,但是这两个字段总是最终超出其父级的边界。该问题源于添加的 插图 填充。为了解决这个问题可以采取什么措施? 注意:该代码可能不是最干净的。例如,可能根本不需要封装文本输入的span元素。 问题答案: 使用CSS定义可防止填充影响元素的宽度或高度。请参阅的文档。您可能还需要检查(IE8 +)的浏览器兼容性。 border-box

  • 我正在尝试制作一个很好的ApiWrapper组件来填充各种子组件中的数据。从我读到的所有内容来看,这应该是可行的:https://jsfidle.net/vinniejames/m1mesp6z/1/ 但由于某种原因,当父状态更改时,子组件似乎没有更新。 我是不是漏了什么?

  • 我在我的应用程序中,打开了一个活动。我按下主页按钮并更改语言,从taskmanager打开我的应用程序。问题:我的活动布局越来越宽。 对应于该活动的androidmanifest的更改: 注意:若我在android清单中添加语言环境,布局是正确的,但语言不会立即更新。用户必须关闭该活动,然后重新启动,只有这样语言才能得到更新。 请提供您的意见。

  • 问题内容: 假设我有几列,我想旋转其中的一些值: 使用此CSS: 问题答案: 假设您希望旋转90度,即使对于非文本元素也可以旋转-但是像CSS中许多有趣的事情一样,它需要一些技巧。根据CSS 2规范,我的解决方案还会从技术上调用未定义的行为-因此,尽管我已经测试并确认它可以在Chrome,Firefox,Safari和Edge中使用,但我不能保证将来不会损坏浏览器版本。 Short answer