2017-03-28 5 views
0

JFrameのコンポーネントを独自のクラスの中からリロードする方法は、削除するか、新しいものを作成してもう一度追加するかのようにすることができますか?JComponentをリロードする

this.repaint()とよく似ていますが、可能であれば実際にはそれを再構築します。

+3

なぜですか?新しいコンポーネントを作成する代わりに、既存のコンポーネントのプロパティをリセットするだけです。 – camickr

+0

コンストラクタでファイルを読み込み、それに応じてコンポーネントの内容を更新するので、コードを複製して特定の配列のスコープを変更するよりもはるかにクリーンな結果になります:) – Alex

+1

' code' - なぜあなたはコードを複製する必要がありますか?メソッドを作成できます。このメソッドは、ファイルからデータを取り出し、コンポーネントを更新します。 – camickr

答えて

0

まず第一に、あなたはJFrameの上のJPanelを追加し、それらのコンポーネントを追加する場合は良いだろう、フレームに直接のJComponentを追加しないでください。..

JPanelの上のコンポーネントを交換するために、あなたが使用することができます次の機能

jPanel.remove(comp); 
or 
jPanel.removeAll(); 

jPanel.add(comp); 
jPanel.revalidate(); 
jpanel.repaint(); 

あなただけが少しjf.setSize(x、y)を使用してフレームをリフレッシュするための部品を交換した後、フレームのサイズを変更する必要があるのJFrameをどうしたい場合。

import javax.swing.*; 
import java.util.concurrent.*; 
public class FrameReplaceComp { 
    public static void main(String[] args) throws Exception { 

    JFrame frame = new JFrame("Hello swing"); 
    final JLabel label = new JLabel("Label 1"); 
    frame.add(label); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(300, 100); 
    frame.setVisible(true); 

    Thread.sleep(1000); 

    final JLabel label1 = new JLabel("Label 2"); 
    frame.remove(label); 
    frame.add(label1); 
    frame.setSize(300,101); 

    } 
} 
関連する問題