Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Gradiente colori

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    17

    Gradiente colori

    ciao a tutti
    vorrei che la mia matrice fosse riempita con una tonalità sfumata rosso/arancio UGUALE in ogni casella e non unica per tutta la matrice. vi posto le due classi

    codice:
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.GradientPaint;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.geom.Rectangle2D;
    import javax.swing.JPanel;
    
    
    public class MatrixPanel extends JPanel{
        
        protected Rectangle2D.Double [][] rect;
        protected GradientPaint [][] colorrect;
        private int row,column;
        private final int LATO = 30;
        
        //costruttore
        public MatrixPanel(int row,int column){
            
            super();
            
            this.row = row;
            this.column = column;
            this.rect = new Rectangle2D.Double [this.row][this.column];
            this.colorrect = new GradientPaint [this.row][this.column];
            //inizializzo matrice di rettangoli
            for(int i=0;i<this.row;i++){
                for(int j=0;j<this.column;j++){
                    
                    this.rect[i][j] = new Rectangle2D.Double(20+(i*this.LATO),20+(j*this.LATO),this.LATO,this.LATO);
                    
                }
            }
            
            //inizializzo la matrice dei colori
            for(int i=0;i<this.row;i++){
                for(int j=0;j<this.column;j++){
                    
                    GradientPaint gp1 = new GradientPaint(0,0,Color.RED,0, 70,Color.ORANGE);
                    this.colorrect[i][j] = gp1;               
                    
                }
            }
        }
        
        //lo disegna
        @Override
        public void paintComponent(Graphics g){
        
            super.paintComponent(g);
            Graphics2D g2d = (Graphics2D)g;
            setBackground(Color.WHITE);
            
            for(int i=0;i<this.row;i++){
                for(int j=0;j<this.column;j++){
                
                    
                    g2d.setPaint(this.colorrect[i][j]);
            g2d.fill(this.rect[i][j]);
            g2d.setColor(Color.black);
            g2d.draw(this.rect[i][j]);
                
                }
            
            
            }
            
        
        }
        
    }
    Questo è il main
    codice:
    import java.awt.Container;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import javax.swing.JFrame;
    
    
    public class MatrixFrame extends JFrame{
        
        private MatrixPanel mtx;
        
        public MatrixFrame(){
        
            super("matrice 4x3");
            
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.mtx = new MatrixPanel(3,4);
        
            Container contPane = this.getContentPane();
            contPane.add(this.mtx);
            
            this.pack();
            
        }
        
    
        public static void main(String[] args) {
            javax.swing.SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    new MatrixFrame().setVisible(true);
                }
            });
        } // end method main()
        
        
    }
    Grazie mille in anticipo

  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 che la mia matrice fosse riempita con una tonalità sfumata rosso/arancio UGUALE in ogni casella e non unica per tutta la matrice.
    Quando crei il GradientPaint devi sfruttare le coordinate x1/y1/x2/y2 che puoi passargli, in modo che siano nello specifico rettangolo.
    E visto che GradientPaint tratta float, probabilmente ti sarà più comodo usare Rectangle2D.Float.

    E visto che il Rectangle e il GradientPaint sono "associati", sarebbe anche più preferibile "modellare" questo con una apposita classe es. GradientRectangle, che contiene i due oggetti e che risulta quindi più semplice da usare, già anche solo all'atto della istanziazione.

    Altre cose utili:
    - Nel frame fai un pack(). Il punto/problema è che il tuo MatrixPanel non ha un "preferred" size proporzionato al contenuto che poi disegna. Quindi o imponi la dimensione del frame o imponi un preferred size al pannello o fai in modo che il pannello fornisca il preferred size "giusto".
    - Nel paintComponent non serve fare setBackground ogni volta. È già il "super" paintComponent che si fa carico di gestire il background. Quindi ti basta impostarlo 1 volta sola es. nel costruttore.
    Ultima modifica di andbin; 19-03-2014 a 09:53
    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
    grazie veramente gentilissimo

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.