Куда идет моя вторая панель JPanel?
Я пытаюсь написать базовое графическое приложение: это просто прокручиваемое окно с текстовыми полями и несколькими кнопками. Я настроил JFrame
и JScrollPane
следующим образом:
public class MainFrame extends JFrame {
public MainFrame() {
this.setLayout(new BoxLayout(this.getContentPane(), BoxLayout.PAGE_AXIS));
JScrollPane scrollPane = new JScrollPane();
JPanel contentPanel = new JPanel(); contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.PAGE_AXIS));
contentPanel.setPreferredSize(new Dimension(600,1600));
scrollPane.setViewportView(contentPanel);
this.setContentPane(scrollPane);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scrollPane.getViewport().add(new PCData());
scrollPane.getViewport().add(Box.createRigidArea(new Dimension(0,100)));
scrollPane.getViewport().add(new PCData());
this.validate();
this.setSize(625,800);
this.setVisible(true);
}
public static void main(String[] args) {new MainFrame();}
}
Где класс PCData
следующий:
public class PCData extends JPanel {
public PCData() {
this.setSize(new Dimension(600,300));
this.setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
this.add(new JTextField());
JPanel nameData = new JPanel();
nameData.setLayout(new BoxLayout(nameData, BoxLayout.LINE_AXIS));
nameData.add(new JTextField());
nameData.add(Box.createRigidArea(new Dimension(5, 0)));
nameData.add(new JTextField());
this.add(nameData);
}
}
В итоге, однако, у меня отображается только одна из двух областей PCData
, несмотря на предпочтительный размер. Панель содержимого не прокручивается. Однако, если я удалю три строки:
//scrollPane.getViewport().add(new PCData());
//scrollPane.getViewport().add(Box.createRigidArea(new Dimension(0,100)));
//scrollPane.getViewport().add(new PCData());
JScrollPane
снова становится прокручиваемым. Почему это происходит и как может произойти? Я получаю обе панели PCData
для отображения? (Обратите внимание: я ищу ипочему , и как, а не только как.)
1 ответ:
scrollPane.getViewport().add(new PCData()); scrollPane.getViewport().add(Box.createRigidArea(new Dimension(0,100))); scrollPane.getViewport().add(new PCData());
В видовой экран можно добавить только один компонент.
Итак, вам нужно создать панель. Добавьте 3 компонента на панель. Затем добавьте панель в окно просмотра.