【发布时间】:2012-09-22 07:19:56
【问题描述】:
我还是 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 子级的操作,也会发生这种情况。
我怎样才能阻止它?
【问题讨论】:
-
“请在这件事上逗笑我” 不。使用布局!等到你能弄清楚逻辑的时候以自定义方式布局组件,该逻辑值得放入自定义布局中。但首先要了解如何使用现有的布局。
-
@AndrewThompson 但我想知道 wwhhyyyyyyyyyyyyy!如果你告诉我为什么,我保证我会去了解更多关于布局管理器的信息。 :(
-
我保证,如果您了解布局管理器,我不会需要告诉您为什么。
-
@AndrewThompson 好的老师。如果是这样的话,但是当我最终弄清楚时,将此线程添加为书签,我有一天会回来回答我自己的问题。这是一个承诺!