Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    127

    [java] visualizzare immagine con controllo di posizione

    salve, vorrei tentare di implementare una situazione, che ad un primo impatto sembra molto complicata.

    Magari qualcuno di voi ha esperienza in queste cose e mi può suggerire qualche fonte per imparare.

    Vi posto l'esempio che devo emulare :



    oltre a visualizzare l'immagine in un JPanel devo ottenere un meccanismo legato al puntatore del mouse, che a seconda della posizione mi scriva le coordinate come x ed y .

    per ora ho visto questo
    http://java.sun.com/docs/books/tutor...elistener.html

    ed ho visto che potrei sapere se il mouse è dentro l'area dell'immagine, ma poi come faccio a sapere le coordinate in ogni momento in cui il mouse si trova all'interno ?

    seconda cosa che dovrei fare, tracciare dei poligoni all'interno di questa immagine, con dei click sulla stessa, come potete vedere nell'esempio sopra, quell'area arancione....

    grazie mille per l'aiuto !!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [java] visualizzare immagine con controllo di posizione

    Originariamente inviato da tulkas85
    per ora ho visto questo
    http://java.sun.com/docs/books/tutor...elistener.html

    ed ho visto che potrei sapere se il mouse è dentro l'area dell'immagine, ma poi come faccio a sapere le coordinate in ogni momento in cui il mouse si trova all'interno ?
    MouseListener a dire il vero ti fornisce solo eventi più generali come "entrato", "uscito", "cliccato" ecc...

    Quello che ti serve è registrare un MouseMotionListener che ti permette di ascoltare ogni movimento del mouse.

    Originariamente inviato da tulkas85
    seconda cosa che dovrei fare, tracciare dei poligoni all'interno di questa immagine, con dei click sulla stessa, come potete vedere nell'esempio sopra, quell'area arancione....
    Si può realizzare. Devi fare ovviamente del custom painting nel pannello (devi estendere JPanel e fare l'override di paintComponent()).
    Prima disegni l'immagine, poi "sopra" disegni le varie figure. Se devi poter avere un numero "arbitrario" di figure, devi tenere una apposita "struttura dati" che le descrive. E nel paintComponent() le disegni scansionando la struttura dati.
    Trovi diversi esempi tra i miei Java Examples.
    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
    Jan 2006
    Messaggi
    127
    ok grazie mi metto all'opera , vediamo cosa esce fuori

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    127
    andbin sto guardando il tuo esempio changable triangle painter, l'ho leggermente modificato in modo da prendere i punti del poligono a partire dal click del mouse. ora vorrei fare in modo che il poligono venga disegnato con uno sfondo. ho provato a mettere in paint component g2d.setBackground(Color.BLUE) ma non funge....

    in seconda battuta in realtà lo sfondo del poligono dovrebbe avere una sorta di trasparenza, ma andando per gradi vorrei prima di tutto mettere uno sfondo colorato... grazie

    codice:
    protected void paintComponent(Graphics g) {
            super.paintComponent(g);
    
            Graphics2D g2d = (Graphics2D) g;
    
            // Activates "antialiasing" to have a good quality.
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    
            // Draws the polygon.
            g2d.setColor(Color.RED);
            g2d.setBackground(Color.BLUE);
            g2d.setStroke(stroke);
            g2d.draw(polygon);
    
            // Draws the dots for the vertexes of the polygon.
            g2d.setColor(Color.BLACK);
            
            for (int i = 0; i < polygon.npoints; i++) {
                int x = polygon.xpoints[i] - DOT_SIZE/2;
                int y = polygon.ypoints[i] - DOT_SIZE/2;
    
                g2d.fillOval(x, y, DOT_SIZE, DOT_SIZE);
            }
        }

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da tulkas85
    andbin sto guardando il tuo esempio changable triangle painter, l'ho leggermente modificato in modo da prendere i punti del poligono a partire dal click del mouse. ora vorrei fare in modo che il poligono venga disegnato con uno sfondo. ho provato a mettere in paint component g2d.setBackground(Color.BLUE) ma non funge....
    setBackground() del Graphics serve solo in 1 caso: quando si deve usare clearRect() per "ripulire" una regione. E basta. Quindi non ha quel "significato" che pensavi.

    I draw()/drawOval()/drawRect() ecc... disegnano solo il "contorno" (non riempiono) dell'oggetto disegnato e usano principalmente le proprietà Color/Paint e Stroke.
    Se vuoi solo riempire l'oggetto disegnato devi usare i fill()/fillOval()/fillRect() ecc.... che usano principalmente la proprietà Color/Paint.
    Non ci sono metodi per avere contorno e riempimento contemporaneamente insieme.

    E nota che se hai un oggetto Polygon puoi ovviamente usare i draw(Shape) e fill(Shape) (perché Polygon è-un Shape) ma sarebbe più appropriato usare drawPolygon(Polygon p) e fillPolygon(Polygon p).

    Originariamente inviato da tulkas85
    in seconda battuta in realtà lo sfondo del poligono dovrebbe avere una sorta di trasparenza
    Basta impostare un Color che ha un canale "alpha" con valore inferiore a 255 (255=completamente opaco).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    127
    grazie mille andbin...

    comunque per il fatto di avere il contorno con il riempimento, ho utilizzato in sequenza le seguenti istruzioni

    codice:
     Graphics2D g2d = (Graphics2D) g;
            g.drawImage(backgroundImage,0,0,null);
            //Graphics2D gg2d=(Graphics2D) g;
            // Activates "antialiasing" to have a good quality.
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    
            // Draws the polygon.
            g2d.setColor(Color.RED);
            
            g2d.setStroke(stroke);
            g2d.draw(polygon);
            Color myColor=new Color(150,40,129,220);
            g2d.setColor(myColor);
            g2d.fill(polygon);
    non ho ancora ben capito però a cosa serve impostare stroke e renderingHint ...???

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da tulkas85
    codice:
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    Questo attiva l'anti-aliasing ... in pratica attenua l'effetto "scalettatura" sfumando i bordi delle figure.
    http://en.wikipedia.org/wiki/Anti-aliasing

    Originariamente inviato da tulkas85
    codice:
            g2d.setStroke(stroke);
    Un Stroke (BasicStroke la implementazione predefinita) descrive lo "stile" del contorno da disegnare. Per BasicStroke è lo spessore, la decorazione a fine linea, il modo di unione delle linee, il tipo di tratteggio, ecc...

    Originariamente inviato da tulkas85
    codice:
            g2d.draw(polygon);
            g2d.fill(polygon);
    L'ho già detto prima ma lo ripeto per la 2a volta: se devi disegnare un Polygon, non usare draw(Shape)/fill(Shape) .... usa drawPolygon(Polygon)/fillPolygon(Polygon).
    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.