Это потому, что JFrame
использует по умолчанию менеджер раскладки BorderLayout
.Этот менеджер компоновки делит контейнер на пять регионов: CENTRE, NORTH / PAGE_START, SOUTH / PAGE_END, WEST / LINE_START и EAST / LINE_END. Посмотрите здесь. Если вы просто хотите выбросить компоненты в контейнер и позволить ему упорядочить их для вас, вы можете использовать, например, FlowLayout
, который является менеджером компоновки по умолчанию для JPanel
.Попробуйте что-то вроде этого, чтобы изменить менеджер раскладки вашего JFrame
.
JFrame frame = new JFrame("Many charts same frame");
frame.setLayout( new FlowLayout() );
JFreeChart barChart1 =
ChartFactory.createHistogram("Histogram1","", "", dataset,
PlotOrientation.VERTICAL, true, true, false);
frame.getContentPane().add(new ChartPanel(barChart1));
JFreeChart barChart2 =
ChartFactory.createHistogram("Histogram2","", "", dataset,
PlotOrientation.VERTICAL, true, true, false);
frame.getContentPane().add(new ChartPanel(barChart2));
frame.pack();
frame.setVisible(true);
. Возможно, это решит вашу проблему.Если вы хотите продолжать использовать BorderLayout, вам просто нужно сказать, где, т.е. в каком регионе должны быть вставлены компоненты.Например:
frame.getContentPane().add(new ChartPanel(barChart1), BorderLayout.NORTH);
frame.getContentPane().add(new ChartPanel(barChart2), BorderLayout.CENTER);
Вам не нужно использовать getContentPane()
метод JFrame
тоже.Начиная с Java 5, если я не ошибаюсь, вы можете напрямую использовать метод add
.Примерно так:
frame.add(new ChartPanel(barChart1));
Вот пример, демонстрирующий различия между этими двумя менеджерами компоновки. Взгляните:
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class LayoutManagerTest {
public static void main( String[] args ) {
JFrame f1 = new JFrame( "BorderLayout" );
f1.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
f1.add( new JButton( "btn1" ) );
f1.add( new JButton( "btn2" ) );
f1.add( new JButton( "btn3" ) );
f1.add( new JButton( "btn4" ) );
f1.add( new JButton( "btn5" ) );
f1.setSize( 500, 200 );
f1.setLocationRelativeTo( null );
JFrame f2 = new JFrame( "BorderLayout with regions" );
f2.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
f2.add( new JButton( "btn1" ), BorderLayout.NORTH );
f2.add( new JButton( "btn2" ), BorderLayout.SOUTH );
f2.add( new JButton( "btn3" ), BorderLayout.WEST );
f2.add( new JButton( "btn4" ), BorderLayout.EAST );
f2.add( new JButton( "btn5" ), BorderLayout.CENTER );
f2.setSize( 500, 200 );
f2.setLocationRelativeTo( null );
JFrame f3 = new JFrame( "FlowLayout" );
f3.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
f3.setLayout( new FlowLayout() );
f3.add( new JButton( "btn1" ) );
f3.add( new JButton( "btn2" ) );
f3.add( new JButton( "btn3" ) );
f3.add( new JButton( "btn4" ) );
f3.add( new JButton( "btn5" ) );
f3.setSize( 500, 200 );
f3.setLocationRelativeTo( null );
f1.setVisible( true );
f2.setVisible( true );
f3.setVisible( true );
}
}