Rysowanie na panelu w NetBeans

0

W Netbeans stworzyłem projekt w ten sposób, że w kreatorze odznaczyłem opcję "create main class", następnie do pustej paczki dodałem JFrame Form po czym została ona ustawiona przy uruchamianiu jako main class. Do JFrame chciałbym dodać swój panel na którym można rysować. W związku z tym, utworzyłem odpowiednią klasę:

public class myPanel extends JPanel 
{
    public myPanel()
    {
        setPreferredSize(new Dimension(400,400));
    }
    
    @Override
    public void paintComponent(Graphics g) 
    {
        super.paintComponent(g);
        g.drawRect(0, 0, 200, 200);
    }
}

W klasie JFrame dodałem pole:

private myPanel dPanel;

Zastanawiam się teraz gdzie stworzyć obiekt i jak dodać mój panel do JFrame ? ( do metody initComponents() nie mogę nic dopisać ). W jaki sposób później odrysowywać mój panel (gdzie wywoływać metodę repaint )?

0

Przytrzymaj klasę z panelem w oknie Projects i przeciągnij na formę, wtedy NetBeans automatycznie doda wszystko co potrzebne.
Jak chcesz zrobić to bardziej ręcznie, to w oknie Palette daj prawy przycisk myszki i wybierz Palette Manager. Następnie możesz dodawać komponenty z projektu, luźnych JARków czy zarejestrowanych w NetBeansie bibliotek. Jak już dodasz komponent do palety, to będziesz go mógł przeciągać z palety na formę.

0

Dzięki, działa. Teraz chciałbym coś narysować na moim panelu po kliknięciu na przycisk. Robię to w taki sposób:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) 
{
       Graphics2D g2d = (Graphics2D) myPanel2.getGraphics();
       g2d.drawRect(50, 50, 100, 100);
}

Wszystko działa tylko zastanawiam się czy właściwy sposób ?

dodanie znacznika <code class="java"> - fp

0

Na pewno działa? Spróbuj zminimalizować okno, a potem przywrócić. Kwadrat powinien zniknać, bo okno powinno zostać odrysowane za pomocą metody paint (nie jestem pewien konkretnie której, ale chyba tej).

Nie mam doświadczenia w rysowaniu w Swingu, ale mój pomysł to stworzenie obrazka w pamięci, który będziesz modyfikował, następnie w metodzie paintComponent będziesz odmalowywał ten obrazek na ekran. Dodatkowo pasuje zrobić jakiegoś inteligentnego repainta, tzn tak dobierać parametry, żeby nie obciążać niepotrzebnie procka odmalowywaniem obszarów które nie są widoczne lub nie są zmienione.

Ewentualnie mógłbyś tworzyć coś na wzór obrazka wektorowego w pamięci, tzn wektorowej reprezentacji i specjalnej procedury renderującej. Ale to już byłoby raczej trudniejsze. No chyba, że i tak chciałbyś coś takiego osiągnąć.

0

**paintComponent(Graphisc g) ** odrysowuje na nowo okno przy każdej zmianie, także będzie tak jak mówi **Wibowit **- kiedy zminimalizujesz okno stracisz swój kwadrat.
Stwórz może **ArrayList **jako zmienną prywatną, w której będziesz przechowywał figury do odmalowania. Po kliknięciu dodasz tam, obiekt, który będziesz chciał odmalować i wywołasz repaint(); Potem przeładowując metodę paintComponent (Graphics g) wywołasz w pętli na obiekcie graficznym metodę draw() odmalowując wszystko, co dodałeś do **ArrayList **;

1 użytkowników online, w tym zalogowanych: 0, gości: 1