Java Swing - не может заставить вещи отображаться правильно, используя Border Layout, также получая ошибку положения недопустимого компонента - PullRequest
1 голос
/ 22 марта 2020

Я только что написал простой код, в котором я хочу, чтобы холст появлялся в ЦЕНТРЕ JFrame, а панель конфигурации появлялась в СЕВЕРО того же JFrame. Однако после добавления их оба «холста» не отображаются Если я только добавлю холст, он будет отображаться, но как только я добавлю панель конфигурации, он больше не будет отображаться.

Более того, если я попытаюсь добавить что-то еще на ЮГ того же самого JFrame Я получаю недопустимую ошибку положения компонента, несмотря ни на что ..

Я полный нуб, когда дело доходит до Swing, извините, если ответ очевиден, но я пытался найти и исследовать это в течение последних нескольких часов без любая удача.

Вот что я попробовал:

public class MainFrame extends JFrame {
 ConfigPanel configPanel;
 ControlPanel controlPanel;
 DrawingPanel canvas;

 public MainFrame() {
 super("My Drawing Application");
 init();
 }

private void init() {
     setDefaultCloseOperation(EXIT_ON_CLOSE);

     canvas = new DrawingPanel(this);
     configPanel = new ConfigPanel(this);
     controlPanel=new ControlPanel(this);

      add(canvas,CENTER); 

      add(configPanel,NORTH);

      add(controlPanel,SOUTH); //this gives me a illegal component position error

     pack();

}

}

Ответы [ 2 ]

2 голосов
/ 22 марта 2020
add(controlPanel,SOUTH);

Все строки должны иметь ошибки. Я не уверен, почему это единственный выделенный. Код должен быть:

add(controlPanel, BorderLayout.SOUTH);

Предпочтительным ограничением является использование: BorderLayout.PAGE_END. Прочтите раздел из учебника Swing по Как использовать BorderLayout для получения дополнительной информации и рабочих примеров.

Кроме того, нет причин передавать рамку панели в конструкторе. Если по какой-то причине вам необходимо знать фрейм панели, вы можете вызвать метод SwingUtiltites.windowForComponent(…) после того, как фрейм будет видим.

1 голос
/ 22 марта 2020

, пожалуйста, попробуйте getContentPane().add(controlPanel, SOUTH); вместо add(controlPanel, SOUTH);

сделать это для каждого компонента в коде, который вы предоставили ...

...