Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2015
    Messaggi
    31

    Rappresentazione grafica di punti

    Salve a tutti, sto cercando di implementare, nel mio programma, un'interfaccia grafica che possa mostrare una specie di mappa di alcuni punti che ho opportunamente generato.
    Vorrei che i punti comparissero nello spazio in base alle loro coordinate, rappresentati da piccoli cerchi.
    Volevo quindi attraverso il disegno in 2D e il metodo fillOval creare dei cerchi a cui passare le coordinate come parametro.
    Questo è il tentativo che ho fatto con un solo punto
    codice:
    public class MyPanel extends JPanel{   public MyPanel() {
    super();
    setBackground(Color.WHITE);  
    setSize(600,600);
       }
        protected void paintComponent(Graphics g, double x, double y) {
     super.paintComponent(g);
    g.setColor(Color.cyan);
    g.drawOval((int)x, (int)y, 10, 10);
    g.fillOval((int)x,(int)y,10,10);
    
    
    
    
     }
    }
    Non so come fare per chiamare il metodo. Provo a chiamarlo dal main (la classe principale è quella del JFrame contenente il JPanel), ma non so cosa inserire come primo argomento...Di sicuro sto facendo molta confusione, qualcuno può darmi una mano? grazie mille

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Naomi92 Visualizza il messaggio
    Non so come fare per chiamare il metodo.
    Il punto è che devi ancora comprendere come funziona il painting nei componenti (Swing in questo caso, per quelli AWT è un altro discorso).

    Nei componenti Swing il metodo che rappresenta il "contesto" di disegno è

    protected void paintComponent(Graphics g)

    Se estendendo un componente Swing, es. JPanel, vuoi fare l'override (=ridefinire) il paintComponent, esso deve avere quella firma. Non puoi aggiungere/togliere/cambiare parametri.

    Inoltre l'altro punto essenziale: il paintComponent non lo invochi tu. Lo invoca il framework. In sostanza Swing dice al componente "disegnati!" (ogni volta che serve) invocando appunto il paintComponent.

    P.S. Guarda tra i miei Java Examples, trovi svariati esempi di custom painting.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2015
    Messaggi
    31
    Sei stato molto chiaro e per ora ci sono riuscita Grazie

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2015
    Messaggi
    31
    Ragazzi scusate ma sto avendo ancora qualche piccolo problemino
    Proseguendo nella scrittura del mio programma, voglio fare in modo di avere, all'avvio, un pannello vuoto in cui, ogni volta che viene premuto un bottone, viene generata la mappa.
    Allora, la cosa funziona ma un po' a rilento, nel senso che a volte devo ridurre a icona l'applicazione e riaprirla per far comparire/aggiornare la mappa. E' normale?
    Il mio codice è questo quando viene premuto il bottone:
    codice:
    Rete r = new Rete(nodi);       panel.removeAll();
           panel.add(new Map(r),0);
    dove panel è il pannello bianco inserito all'inizio nella mia interfaccia grafica, e Map è una classe che estende JPanel in cui vi ho inserito il metodo paintComponent che disegna la mappa.
    C'è un modo migliore per farlo, che magari possa evitare anche questo ritardo nella comparsa del disegno?
    Grazie mille in anticipo!

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2015
    Messaggi
    31
    Ho provato a "snellire" un po' il codice in questo modo
    codice:
    Rete r = new Rete(nodi);
           Component add = netPanel.add(r,0);
    Impiegando la classe Rete al posto della classe apposita Map... ma la comparsa delle mappe continua ad avvenire solo previa riduzione a icona/espansione...

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Naomi92 Visualizza il messaggio
    la cosa funziona ma un po' a rilento, nel senso che a volte devo ridurre a icona l'applicazione e riaprirla per far comparire/aggiornare la mappa. E' normale?
    No, non è corretto, infatti.

    Quote Originariamente inviata da Naomi92 Visualizza il messaggio
    Il mio codice è questo quando viene premuto il bottone:
    codice:
    Rete r = new Rete(nodi);       panel.removeAll();
           panel.add(new Map(r),0);
    dove panel è il pannello bianco inserito all'inizio nella mia interfaccia grafica, e Map è una classe che estende JPanel in cui vi ho inserito il metodo paintComponent che disegna la mappa.
    Intanto: idea non molto buona quella di denominare una tua classe con lo stesso nome di una classe (anzi interfaccia) del framework, cioè Map.

    Comunque quando si rimuovono e/o aggiungono componenti in un contenitore, la prima questione importante è se tale contenitore ha un layout manager oppure no. Se ce l'ha, il layout manager va rivalidato e in genere basta un validate() sul contenitore, perlomeno con i layout manager più semplici. Se non ce l'ha, dovrebbe bastare un repaint().
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2015
    Messaggi
    31
    Hai ragione sul nome, non ci avevo pensato
    Comunque, per ora ho risolto sostituendo direttamente panel con un'istanza della classe Mappa ed invocando all'occorrenza il metodo repaint(), sembra funzionare, può andar bene come soluzione?

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Naomi92 Visualizza il messaggio
    invocando all'occorrenza il metodo repaint(), sembra funzionare, può andar bene come soluzione?
    Bisognerebbe vedere il resto del codice, senza vedere altro è difficile dire se va bene e/o se ci sono altre cose che non sono appropriate.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.