Итак, у меня есть класс с именем AppMain, который расширяет JFrame и JPanel (называемую панелью), где я добавляю различные компоненты JSwing (кнопки, метки, разделители), которые пользователь может нажать для различных действий. Одним из таких действий является (во время выполнения) добавить целый JPanel с различными JSpinners и TextAreas. Детали этого находятся в классе, называемом PlayerCharacter, который расширяет JPanel. Когда вы создаете много панелей, вы выходите из вертикального пространства, и никакая полоса прокрутки не создается автоматически. Моя проблема заключается в том, как добавить полосу прокрутки. Я попытался создать ScrollPane, в который я положил вторую панель.Добавление вертикальной прокрутки к JPanel
код выглядит немного как это:
public class AppMain extends JFrame {
public static void main(String[] args) {
new AppMain();
}
private static JPanel panel = new JPanel();
private static JPanel contentPanel = new JPanel();
JScrollPane scrollPane = new JScrollPane(contentPanel);
JButton addPlayerButton = new JButton("Add player");
AppMain() {
super("window name");
setSize(1200, 750);
setLocation(250, 50);
panel.setLayout(null);
contentPanel.setLayout(null);
addPlayerButton.setBounds(5, 5, 150, 40);
contentPanel.setBounds(5, 10, 1100, 750);
scrollPane.setBounds(5, 10, 1100, 750);
panel.add(addPlayerButton);
panel.add(scrollPane);
getContentPane().add(panel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
interfaceControls();
}
public void interfaceControls() {
addPlayerButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 8; i++){
JLabel tmpLabel = new JLabel("text " + i);
tmpLabel.setBounds(5, (100 + (100 * i)), 100, 100);
contentPanel.add(tmpLabel);
contentPanel.revalidate();
contentPanel.repaint();
}
}
});
}
});
}
}
EDIT: и для тех, кому интересно код, который работает:
public class AppMain extends JFrame {
public static void main(String[] args) {
new AppMain();
}
private static JPanel panel = new JPanel();
JPanel topPanel = new JPanel();
JPanel contentPanel = new JPanel();
JButton addPlayerButton = new JButton("Add player");
AppMain() {
super("window name");
setSize(1200, 750);
setLocation(250, 50);
JScrollPane scrollPanel = new JScrollPane(contentPanel);
panel.setLayout(new BorderLayout());
contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS));
panel.add(addPlayerButton, BorderLayout.PAGE_START);
panel.add(scrollPanel, BorderLayout.CENTER);
getContentPane().add(panel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
interfaceControls();
}
public void interfaceControls() {
addPlayerButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 8; i++){
JButton dynamicButton = new JButton("text " + i);
contentPanel.add(dynamicButton);
contentPanel.revalidate();
contentPanel.repaint();
}
}
});
}
});
}
}
Лучшим было бы предоставить [mcve] (http://stackoverflow.com/help/mcve), которые воспроизводят проблему. –