2016-08-11 5 views
0

Ich habe eine JFrame frame, die eine JPanel Panel enthält. Ich fügte auch eine JFreeChart ChartPanel cp zum Panel hinzu. Was ich bis jetzt gemacht habe, ist eine ComponentListener auf meinem Rahmen frame, um auf die Größenänderung des Fensters zu reagieren.Größe JFreeChart.ChartPanel auf Maximierung Bildschirm

Hier ist mein Code-Schnipsel:

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

    ... 
} 

Die ChartPanel perfekt Größe verändert wird, wenn die Größe des Rahmens ändern. Aber wenn ich meinen Rahmen maximiere, ändert das Diagrammfeld seine Größe nicht! Es bleibt genau so wie es ist, bevor es maximiert wird. Wenn ich meinen Frame wieder "unmaximiere", wird das Chart-Panel maximiert und dies führt zu dem Problem, dass das Chart nicht mehr in das Chart-Panel passt. All diese Größenänderung scheint "ein Schritt hinter" zu sein ...

Kennt jemand dieses Verhalten und hilft, es zu korrigieren?

+2

Für eine bessere Hilfe, früher ein [MCVE] oder [kurze, selbständige, korrekte Beispiel] (http://www.sscce.org/). –

+2

Das macht ein LayoutManager. Warum erfinden Sie das Rad neu? – ControlAltDel

Antwort

0

Aufruf ChartPanel.setSize nach ChartPanel.setPreferredSize und JFrame.validate hat den Job gemacht! Siehe den neuen Code:

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

Fügen Sie einfach Ihr 'ChartPanel' zu einem Layout hinzu, das das Diagramm erweitern kann, z. 'GridLayout'; mehr [hier] (http://stackoverflow.com/a/10277372/230513). – trashgod

+0

hat den Job für mich nicht gemacht –

Verwandte Themen