2016-08-11 112 views
0

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

这是我的代码片断:

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是完全调整大小。但是当我最大化我的框架时,图表面板不会改变它的大小!它与最大化之前的时刻保持不变。因此,当我再次“取消最大化”我的框架时,图表面板会最大化,这会导致问题,图表不再适合图表面板。所有这些调整大小的东西似乎是“落后”...

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

+2

为了更好地提供帮助,请发布[MCVE]或[简短自包含正确示例](http://www.sscce.org/)。 –

+2

这是LayoutManager的功能。你为什么重新发明轮子? – ControlAltDel

回答

0

拨打ChartPanel.setSizeChartPanel.setPreferredSizeJFrame.validate做到了!请参阅新代码:

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

只需将“ChartPanel”添加到让图表展开的布局,例如'GridLayout';更多[这里](http://stackoverflow.com/a/10277372/230513)。 – trashgod

+0

没有为我做这项工作 –