0

私はまだJavaに慣れておらず、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パネルを動かします...

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 に答える