Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    17

    Cambiare colore a oggetto 2D

    ciao a tutti
    vorrei scrivere un semplice programma che tramite la pressione di un JButton cambia il colore di un oggetto 2D (in questo caso un cerchio). ecco il codice:

    codice:
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JPanel;
    
    /**
     *
     * @author Rug
     */
    public class Cerchio extends JPanel implements ActionListener{
        
        private int xmin,ymin;
        private Color colore;
        private Graphics g;
        
        public Cerchio(int xmin, int ymin ){
            
            this.colore = Color.BLUE;
            this.xmin = xmin;
            this.ymin = ymin;
            
            JButton but = new JButton("Cambia colore");
            add(but);
            but.addActionListener(this);
            
        }
        
        public Color getColor(){
        
            return this.colore;
        
        }
        
        public void paintComponent(Graphics g){
        
            super.paintComponent(g);
            
            g.setColor(this.colore);
            g.fillOval(this.xmin, this.ymin, 30, 30);
            
        }
        
    //qui c'è l'errore: non ho capito come funzionano gli oggetti Graphics.....
    
        @Override
        public void actionPerformed(ActionEvent e) {
        
            if(this.colore == Color.BLUE){
                this.colore = Color.YELLOW;
                paintComponent(g);
            }
            
    
            if(this.colore == Color.YELLOW){
                this.colore = Color.BLUE;
                paintComponent(g);
            }
            
        }
        
    }
    poi ho creato una classe che estende JFrame in cui incollo un oggetto Cerchio e un main che esegue il tutto.... help

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da rugrag Visualizza il messaggio
    vorrei scrivere un semplice programma che tramite la pressione di un JButton cambia il colore di un oggetto 2D (in questo caso un cerchio).

    codice:
    //qui c'è l'errore: non ho capito come funzionano gli oggetti Graphics.....
    
        @Override
        public void actionPerformed(ActionEvent e) {
        
            if(this.colore == Color.BLUE){
                this.colore = Color.YELLOW;
                paintComponent(g);
            }
            
    
            if(this.colore == Color.YELLOW){
                this.colore = Color.BLUE;
                paintComponent(g);
            }
            
        }
    Innanzitutto il punto fondamentale: il paintComponent non lo devi invocare espressamente tu. Devi semplicemente chiedere un repaint del pannello con un semplice repaint();
    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
    Mar 2014
    Messaggi
    17
    sotituito paintComponent(g) con repaint() però non cambia niente..........

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da rugrag Visualizza il messaggio
    sotituito paintComponent(g) con repaint() però non cambia niente..........
    Sì vero (ma il problema non è repaint(), che è giusto) ..... prova a guardare "bene" la sequenza di test e assegnazioni in actionPerformed.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    17
    oooooook risolto! ora funziona per bene! però se a questo punto volessi farlo cambiare di colore anche cliccandoci sopra col mouse come dovrei fare?? Sto provando a implemntare i metodi di MouseListener però non va!

    codice:
    public void mouseClicked(MouseEvent e) {
            
            int x = e.getX();
            int y = e.getY();
            
            if(x>30 & x<60 & y>30 & y<60){ // ho posto come coordinate di partenza del cerchio 30,30 e altezza e larghezza cono 30 e 30!
            
                if(this.colore.equals(Color.BLUE)){
                this.colore = Color.YELLOW;
                repaint();
            }
            else {
                
            if(this.colore.equals(Color.YELLOW)){
                this.colore = Color.BLUE;
                repaint();
                    } 
                }
            }
        }

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da rugrag Visualizza il messaggio
    però se a questo punto volessi farlo cambiare di colore anche cliccandoci sopra col mouse come dovrei fare??
    Il concetto è (quasi) sempre lo stesso: si riceve l'evento, si fanno le pre-verifiche necessarie, si aggiorna lo "stato" dell'oggetto (tipicamente le variabili di istanza che descrivono la grafica e che vengono usate nel paintComponent) e infine si chiede il repaint (possibilmente "ottimizzato", solo per un certo rettangolo o area specifica).


    P.S. C'è un mio nuovo Java Example (vedi firma) chiamato "Shapes Hover Draw", guardalo, ti potrà essere utile per capire meglio la grafica (l'esempio è un po' più "convoluto" e in parte ottimizzato del tuo).
    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
    Mar 2014
    Messaggi
    17
    grazie mille ci sto dando un occhiata! però nel codice che ho scritto di mouseClicked non succede proprio niente!!!! ho provato anche a mettere un System.out.println("coordinata x: "+e.getX()+"coordinata y: "+e.getY()) però non segna niente su console.......

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da rugrag Visualizza il messaggio
    nel codice che ho scritto di mouseClicked non succede proprio niente!!!
    Hai registrato il MouseListener? ... sul pannello ovviamente (non sul pulsante).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    17
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Hai registrato il MouseListener?
    si! Cerchio implementa ActionListener, MouseListener.......

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.