Добавить JScrollPane в JFrame

У меня есть вопрос относительно добавления компонентов в фрейм Java.

У меня есть JPanel с двумя кнопками, а также JScrollPane, к которому добавлена ​​JTable. Я хочу добавить оба из них в JFrame.

Я могу добавить либо JPanel в JFrame, либо JScrollPane в JFrame, и они отображаются правильно. У меня проблемы с добавлением их обоих в JFrame и отображением их обоих.

Есть ли что-то, связанное с JFrames, которое не позволяет этого? Любая помощь будет оценена.

РЕДАКТИРОВАТЬ

Проблема не в макете (по крайней мере, я так не думаю), проблема в том, что ScrollPane не отображается правильно. Вот изображение, чтобы показать, что я имею в виду:

http://canning.co.nz/Java/ScrollPane.png

Вот код:

    GridBagConstraints gbc = new GridBagConstraints();
    gbc.gridwidth = GridBagConstraints.REMAINDER;
    guiPanel.add(scrollPane, gbc);
    guiPanel.add(buttons, gbc);        

    guiFrame.add(guiPanel, BorderLayout.CENTER);
    guiFrame.setVisible(true);

2 ответа

По умолчанию JFrame имеет Borderlayout. BorderLayout имеет пять флагов. Когда вы не будете указывать какой-либо флаг, он добавит ваш компонент в рамку с центральным флагом. Центральный флаг дает все пространство для компонента, который добавляется с центральным флагом, если никакой другой флаг не указан с компонентом. для получения дополнительной информации о расположении границ перейдите по следующей ссылке: http://docs.oracle.com/javase/tutorial/uiswing/layout/border.html

Вы можете добавить оба с помощью следующего утверждения:

JFrame frame = new JFrame();

frame.add(new JPanel(), BorderLayout.NORTH);

frame.add(new JScrollpane(), BorderLayout.CENTER);

GridBagLayout не подходит для этой ситуации. С меньшим кодом вы можете получить желаемый код.

JPanel pnlButton = new JPanel(new FlowLayout(FlowLayout.CENTER));
pnlButton.add(button1);
pnlButton.add(button2);

JFrame frame = new JFrame();
frame.add(scrollPane, BorderLayout.CENTER);
frame.add(pnlButton, BorderLayout.PAGE_END);

Если вы хотите пойти только с Gridbaglayout. Тогда вам нужно будет установить weightX, weightY, gridwidth и другие свойства, как это

GridBagConstraints gbc = new GridBagConstraints();
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.weightx=1.0;
gbc.weighy=1.0;
gbc.fill = GridBagConstraints.BOTH;
guiPanel.add(scrollPane, gbc);
gbc.gridwidth = 1;
gbc.fill = GridBagConstraints.NONE
guiPanel.add(buttons, gbc);        
guiFrame.add(guiPanel, BorderLayout.CENTER);
guiFrame.setVisible(true);

Пожалуйста, попробуйте и дайте мне знать, если это не работает, я вышлю полный код с GridBaglayout.

Другие вопросы по тегам