在最大化屏幕上调整大小 JFreeChart.ChartPanel

Resize JFreeChart.ChartPanel on maximizing screen

我有一个 JFrame frame,其中包含一个 JPanel 面板。我还在面板中添加了一个 JFreeChart ChartPanel cp 。到目前为止,我所做的是在框架 frame 上使用 ComponentListener 来对调整 window 的大小做出反应。

这是我的代码片段:

private void initialize() throws ParseException {
    frame = new JFrame();
    frame.addComponentListener(new ComponentListener() {
        @Override
        public void componentResized(ComponentEvent e) {
            ChartPanel cp = (ChartPanel)panel.getComponents()[0];
            cp.setPreferredSize(new java.awt.Dimension(panel.getWidth(), panel.getHeight()));
            frame.repaint();
            cp.repaint();
        }

        @Override
        public void componentMoved(ComponentEvent e) {}

        @Override
        public void componentShown(ComponentEvent e) {}

        @Override
        public void componentHidden(ComponentEvent e) {}
    });

    ...
}

ChartPanel 在更改框架大小时完美调整大小。但是当我最大化我的框架时,图表面板不会改变它的大小!它与最大化之前的时刻保持不变。因此,当我再次 "un-maximize" 我的框架时,图表面板被最大化,这导致了问题,即图表不再适合图表面板。所有这些调整大小的东西似乎都是 "one step behind"...

有没有人知道这种行为并帮助纠正它?

ChartPanel.setPreferredSizeJFrame.validate 完成工作后调用 ChartPanel.setSize!查看新代码:

frame = new JFrame();
frame.addComponentListener(new ComponentListener() {
    @Override
    public void componentResized(ComponentEvent e) {
        // frame.repaint();
        ChartPanel cp = (ChartPanel)panel.getComponents()[0];
        cp.setPreferredSize(new java.awt.Dimension(panel.getWidth(), panel.getHeight()));
        cp.setSize(new java.awt.Dimension(panel.getWidth(), panel.getHeight()));
        // frame.invalidate();
        frame.validate();
        // frame.repaint();
    }
    ...
});
...