0

我还是 Java 的新手,我很喜欢玩弄它,所以请在这件事上取笑我。我知道布局管理器,但我对摆动的机制很感兴趣,所以我使用的是绝对定位。任何见解将不胜感激。

因此,当我将 JLabel 添加到 JPanel 时,我注意到了一个令人讨厌的行为。例如,如果我这样设置:

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 面板......

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...

conPane.add(myLabel);

并且它将 conPane 重置回它的起始位置。基本上是在未经我许可的情况下做 setBounds(0,0,1600,1000) ;

如果我移动标签、更改它的图标或几乎做任何涉及更改 conPane 的子级的事情,也会发生这种情况。

我怎样才能阻止它?

4

1 回答 1

2

并且它将 conPane 重置回它的起始位置

从本质上讲,这是错误的。这是错误的,因为您的假设是错误的:您假设

contPane.setBounds(....)

实际上没有效果时会产生效果:负责布局组件的 layoutManager 是其父组件的管理器(在这种情况下,它是 RootPaneLayout ,您绝对不想搞砸)。无论您做什么,该经理都会将其设置为框架的大小(- 插图 - 菜单栏)。您可以通过为 contentPane 设置边框来可视化:

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

归根结底,即使您坚持不使用它来浪费时间 ,也绝对没有办法学习所有有关布局的知识。

于 2012-09-22T09:06:09.550 回答