当改变一个元素时,帧不正确地更新



我想改变一些我的JFrame组件(JPanel, ChartPanel)在一些动作事件发生后(按钮点击)。下面是一个具体的例子:

最初我开始我的框架是空的(只有菜单栏和没有任何其他面板)。我点击菜单"文件>打开",选择一个文件,这里就变成了一个图表。之后,为了清晰,我调整了我的框架大小。一切都很完美。但接下来我再次点击选择文件以获得新的图表,而不是这个我的图表没有正确更新:这是一个问题的例子

下面是我的代码:

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();
                }
         }
}

为什么会发生这种情况,我需要改变什么?

猜测,因为您没有发布有效的最小代码示例程序,但您应该从容器中删除旧组件,然后添加新组件,然后调用revalidate() 然后调用repaint()—您似乎缺少的关键步骤。重新粉刷应该有助于清理旧的"脏"像素。

或者你可以走更简单的路线,简单地使用CardLayout来帮助你交换视图

最新更新