2016-08-11 108 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

沒有爲我做這項工作 –