2017-05-04 15 views
0

ArraylistからJPanelにJLabelsを追加しています。パネルにレイアウトを設定しても表示されますが、試してみるとラベルの位置を自分で設定したいのですpanel = new JPanel(null);すべてのラベル表示されません。JPanel(null)がJLabelsを表示しない

フレーム:

public static void Frame(){ 
     panel = new JPanel(null); 
     JFrame frame = new JFrame("New"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
     frame.pack(); 
     frame.setSize(400,400); 
     frame.add(panel); 
} 
パネルにラベルを追加し

ArrayListの反復

private static void printArray() { 
     for(int i = 0; i < food.size(); i++){ 
      component = new JLabel(new Food(food.get(i).getColor(), 
      food.get(i).getIconHeight(), food.get(i).getIconWidth(), 
      food.get(i).getLocationX(), food.get(i).getLocationY())); 
      panel.add(component); 
      component.setLocation(food.get(i).getLocationX(), 
      food.get(i).getLocationY()); 
     } 
} 

私は、なぜそれがこの場所に入れていないので、それは間違いなく、位置情報を取得して、デバッグから見ることができます。

enter image description here

+1

"レイアウトマネージャ"はどのような仕事をしているのでしょうか?あなたが 'null'に設定したときに何が起こるか推測します。 – MadProgrammer

+1

*" ArraylistからJPanelにJLabelsを追加しています。レイアウトを設定すると表示されます。 " - 正しいですが、*"しかし、自分自身のラベル "* - さて、まず、私はなぜ尋ねるのだろうか?利用可能なレイアウトマネージャができないことを何をしようとしていますか? – MadProgrammer

+0

@MadProgrammer私はこのコードに従っています。http://www.camick.com/java/source/MotionWithKeyListener.javaこれは同じことをしているようですが、彼のコードはうまくいきます。レイアウトをnullに設定する理由は、ラベルの位置を更新してキーボード入力で「移動」できるようにするためです。このドキュメントでは、nullに設定することも推奨しています。https://docs.oracle.com/ javase/tutorial/uiswing/layout/none.html Psあなたの仕事が大好きです。 – Ross

答えて

1

nullはので、私は、キーボード入力

あなたが必要がある最初の事でそれを周りに「移動」することができますので、私は、ラベルの位置を更新することができているようなレイアウトを設定する理由レイアウトマネージャが実際にどのような仕事をしているのか理解しておくことです。なぜなら、それを取り除くつもりなら、仕事を引き継ぐ必要があるからです。

レイアウトマネージャは、コンポーネントのサイズと位置の両方を決定します。彼らはさまざまな方法でこれを行いますが、コンポーネントのメソッドを使用することができます。

だから、これはあなたがたとえば、これらの値について独自の決定を行う必要があることをお勧め...

component = new JLabel(new Food(food.get(i).getColor(), 
     food.get(i).getIconHeight(), food.get(i).getIconWidth(), 
     food.get(i).getLocationX(), food.get(i).getLocationY())); 
component.setSize(component.getPreferredSize()); 
component.setLocation(food.get(i).getLocationX(), food.get(i).getLocationY()); 

私もそれは同じに悩まされない、KeyListenerKey Bindingsを使用してお勧めしますフォーカスに関連する問題

関連する問題