Visualizzazione dei risultati da 1 a 10 su 13

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2016
    Messaggi
    8
    Quote Originariamente inviata da Ansharja Visualizza il messaggio
    Scusa se mi ripeto, ma dovresti davvero inserire il codice che posti tra i tag [CODE] , altrimenti si diventa matti a sistemarlo prima di capirci qualcosa...

    Riguardo al codice, ti evidenzio subito un primo errore: il MouseListener non va assolutamente aggiunto al pannello all'interno del metodo paintComponent, così come il caricamento dell'immagine, il paintComponent deve solo occuparsi della logica relativa al disegno, tutto il resto appesantisce il metodo e richiamarlo in continuazione rallenta inutilmente l'esecuzione.

    Puoi inserire queste parti nel costruttore di MultiCirclesPaintPanel, o in metodi appositi se il codice si allunga e devi richiamare più di un'immagine o altro.

    Da quello che vedo poi, aggiungi un'immagine per ogni CircleElement (se aggiungi anche il codice di questa classe si riesce anche a fare qualche prova), quindi nel mousePressed del MouseAdapter sarebbe conveniente ciclare sui tuoi circleElements per ricercare quello che contiene il punto cliccato ...
    codice:
    
    
    codice:
    public class CircleElement extends JComponent{
        /**
         * 
         */
        
        private int centerX;
        private int centerY;
        private int radius;
        private Color fillColor;
        
        public CircleElement(int centerX, int centerY, int radius, Color fillColor) {
            this.centerX = centerX;
            this.centerY = centerY;
            this.radius = radius;
            this.fillColor = fillColor;
            
             
             
             
                
        
            
        }
    
    
        public int getCenterX() {
            return centerX;
        }
    
    
        public void setCenterX(int centerX) {
            this.centerX = centerX;
        }
    
    
        public int getCenterY() {
            return centerY;
        }
    
    
        public void setCenterY(int centerY) {
            this.centerY = centerY;
        }
    
    
        public int getRadius() {
            return radius;
        }
    
    
        public void setRadius(int radius) {
            this.radius = radius;
        }
    
    
        public Color getFillColor() {
            return fillColor;
        }
    
    
        public void setFillColor(Color fillColor) {
            this.fillColor = fillColor;
        }
    
    
    
    
        // Custom methods to get other useful informations
    
    
        public int getLeftX() {
            return getCenterX() - getRadius();
        }
    
    
        public int getTopY() {
            return getCenterY() - getRadius();
        }
    
    
        public int getDiameter() {
            return getRadius() * 2;
        }
        
                
        
        
    }
    Ma le coordinate dopo come le prendo nel costruttore?

    Comunque l'ideale sarebbe rendere cliccabili i CircleElement...ancora meglio delle Image!
    Ultima modifica di spino8; 03-07-2016 a 12:43

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Quote Originariamente inviata da spino8 Visualizza il messaggio

    Ma le coordinate dopo come le prendo nel costruttore?
    Comunque l'ideale sarebbe rendere cliccabili i CircleElement...ancora meglio delle Image!
    Le coordinate le prendi esattamente come fai adesso, solo che aggiungi un unico MouseAdapter al pannello e non uno per ogni circleElement come fai adesso (e tra l'altro ora ne aggiungi n ad ogni volta che il metodo paintComponent viene richiamato, come detto non va affatto bene).

    Ora utilizzi un unico ciclo all'interno del paintComponent : per ogni circleElement effettui il disegno, e poi aggiungi al pannello un mouseListener che usa le "x" e "y" del circleElement che leggi nel ciclo esterno.

    Devi cambiare questa parte: nel paintComponent rimuovi la parte relativa al mouseListener, e lo aggiungi una sola volta al pannello.
    All'interno del mousePressed farai un nuovo ciclo in cui per ogni circleElement leggi la x e la y ed effettui quel controllo per vedere se il punto è compreso all'interno.

    Se vuoi fare il controllo usando lo stesso circleElement invece che l'immagine, va bene, ma finché usi un rettangolo o un cerchio è facile controllare se il punto è all'interno, se la forma geometrica è più complessa ovviamente aumenta anche la complessità di questa parte.
    Per un cerchio basta controllare se la distanza del punto cliccato dal centro del circleElement è minore o meno del raggio...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2016
    Messaggi
    8
    Per rendere cliccabile sul Circle Element quindi sempre la stessa cosa devo fare? e devo cambiare solo la condizone degli if?

    dal punto di vista del codice "controllare se la distanza del punto cliccato dal centro del circleElement è minore o meno del raggio" come sarebbe?

    cioè potresti esplicitarmi le due cose in forma codice? su questa cosa ci sto da due settimane ormai e ho provato tante di quelle soluzioni che ho la testa confusa!
    Grazie

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.