2016-09-27 13 views
0

何らかのアクションイベントが発生した(ボタンがクリックされた)後、JFrameコンポーネント(JPanel、ChartPanel)の一部を変更したい。具体的な例の下に:フレームが正しく更新されない

最初は私のフレームを空にしています(メニューバーだけで他のパネルはありません)。私は 'ファイル>開く'メニューをクリックしています、ファイルを選択し、ここでグラフになります。その後、私はフレームのサイズを変更しました。すべてが完璧です。 here is an illustration of problem

そしてここでは私のコードです:

public MenuBarDataAnalyser() { 

    JMenu menuFile = new JMenu("File"); 

    itmOpen = new JMenuItem("Open..."); 
    itmOpen.addActionListener(this); 

    add(menuFile); 
    menuFile.add(itmOpen); 
} 


@Override 
public void actionPerformed(ActionEvent e) { 
if(source == itmOpen){ 
     final JFileChooser fch = new JFileChooser(); 
     FileFilter filter = new FileNameExtensionFilter("FITS file", "fits"); 
     fch.setFileFilter(filter); 
     int response = fch.showOpenDialog(itmOpen); 
     if (response == JFileChooser.APPROVE_OPTION){ 
      String pathFilename = fch.getSelectedFile().toString(); 
      JFreeChart chart = GUIDataAnalyserFrame.createChart(pathFilename); 
       ChartPanel chartPanel = new ChartPanel(chart, true, true, true, false, true); 
       JButton button = new JButton("Calibrate"); 
       JPanel buttonPanel = new JPanel(); 
       buttonPanel.add(button); 

       chartPanel.revalidate(); 

       GUIDataAnalyserApp.analyserFrame.add(chartPanel, BorderLayout.CENTER); 
       GUIDataAnalyserApp.analyserFrame.add(buttonPanel, BorderLayout.EAST); 
       GUIDataAnalyserApp.analyserFrame.revalidate(); 
       } 
     } 
} 

なぜ、この出来事と私はする必要があるが、次の私は、チャートが正常に更新されていない新しいグラフを取得するために再度ファイルを選択しクリックして、代わりにこのよ変化する?

答えて

3

推測では、有効なminimal code example program掲載いませんでしたが、あなたはその後、呼び出し、その後、新しいものを追加し、コンテナから古いコンポーネントを削除する必要がありますので、revalidate()THENコールrepaint() - あなたが表示され、重要なステップ行方不明再ペイントは、古い「汚れた」ピクセルを除去するのに役立ちます。

また、はるかに簡単なルートを使用して、単にCardLayoutを使用してビューをスワップすることもできます。

+0

ありがとうございました!できます。フレームから要素を削除し(存在する場合)、各要素の再検証と再描画を呼び出しました。 –

+0

@AndreiSh:いいえ、各要素ではありません。すべてを削除して追加した後、コンテナ(ここでは 'GUIDataAnalyserApp.analyserFrame')で呼び出します。 –

+1

同様の代替案が提案されています[ここ](http://stackoverflow.com/a/39120572/230513)。 – trashgod

関連する問題