Właśnie napisałem prosty kod, w którym chcę, aby płótno pojawiło się w ŚRODKU JFrame, a panel konfiguracyjny w PÓŁNOCNEJ tej samej JFrame, jednak po dodaniu ich obu `` płótno '' w ogóle się nie wyświetla. Jeśli dodam tylko płótno, zostanie ono wyświetlone, ale gdy tylko dodam panel konfiguracyjny, nie będzie już wyświetlane.

Ponadto, jeśli spróbuję dodać coś innego na POŁUDNIU tej samej ramki JFrame, otrzymuję niedozwolony błąd pozycji komponentu, bez względu na wszystko.

Jestem kompletnym noobem, jeśli chodzi o Swinga, więc przepraszam, jeśli odpowiedź jest oczywista, ale próbowałem googlować i badać to przez ostatnie kilka godzin bez powodzenia.

Oto, czego próbowałem:

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();

}

}
1
Jerome Durham 22 marzec 2020, 22:08

2 odpowiedzi

Najlepsza odpowiedź

Proszę spróbować getContentPane().add(controlPanel, SOUTH); zamiast add(controlPanel, SOUTH);

Zrób to dla każdego komponentu w podanym kodzie ...

1
Tommy Brettschneider 22 marzec 2020, 19:17
add(controlPanel,SOUTH);

Wszystkie wiersze powinny zawierać błędy. Nie jestem pewien, dlaczego jest to jedyne wyróżnione. Kod powinien wyglądać następująco:

add(controlPanel, BorderLayout.SOUTH);

Preferowanym ograniczeniem jest użycie: BorderLayout.PAGE_END. Przeczytaj sekcję z samouczka Swing na temat Jak korzystać z BorderLayout aby uzyskać więcej informacji i przykładów roboczych.

Nie ma też powodu, aby w konstruktorze przekazywać ramkę do panelu. Jeśli z jakiegoś powodu potrzebujesz znać ramkę panelu, możesz wywołać metodę SwingUtiltites.windowForComponent(…) po tym, jak ramka jest widoczna.

2
camickr 22 marzec 2020, 19:12