2016-09-27 4 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

관련 문제