2016-09-23 18 views
0

JLabelを動的に追加するリスナーがある場合、コンポーネントをすぐに表示する方法はありますか?JavaでJcomponentを強制的に表示するにはどうすればよいですか?

私は、すべての動的に追加されたラベルを格納するArrayListを持っているプロジェクトに取り組んでいます。パネルに線を引く方法もあります。新しいJLabelの位置(xとy)に依存します。リスナー内のコードは次のとおりです。

panel.add(labelArrayList.get(index)); 
panel.repaint(); 
panel.revalidate(); 

drawLine(); 

ここで、drawLine()は、パネル上に単一行を描画するメソッドです。

private void drawLine(){ 
    /*Draw from (x1,y1) to (x2,y2), where (x1,y1) is fixed at original and (x2,y2) is the location of the newly added JLabel*/ 
    graphics2d.drawLine(x1, y1, x2, y2); 
} 

私がデバッグモードになっていたとき、repaint()およびrevalidate()の後にアイテムが追加されていないことがわかりました。したがって、私は新しく追加されたラベルの場所を取得できません。新しいJLabelは、drawLines()メソッドが呼び出された後に表示されます。

drawLine()が呼び出される前に新しいラベルを追加します。それを動作させる方法はありますか?

+1

このコードはリスナーにありますか?リスナーに線を直接描画するのはかなり正直です。そのようなことは一般的にpaintComponent()メソッドで起こります。あなたの主な問題は、スウィングのやり方をしないことにもっと関連しているかもしれません。 – Gimby

答えて

0

repaint()またはrevalidate()の代わりに)doLayout()をコールします。

関連する問題