Добавить 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.