Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente bannato
    Registrato dal
    Jul 2007
    Messaggi
    19

    trasparenze e rilievo

    Buonasera
    Vorrei che quando passo con il mouse sopra il pulsante (mouse entered) mi venga fuori un effetto identico a quello che viene con win xp se passate con il mouse sopra i tasti di avvio veloce alla destra del bottone start in basso a sinistra (L'icona di explorer quella del desktop e win media player per intenderci).
    Ho provato con borderfactory ma non c'e' nessuna opzione che faccia al caso mio..
    Qualche idea??
    P.S. il bordo in rilievo che viene con borderfactoryraisebevelborder deve essere del medesimo colore che utilizzo per lo sfondo (Immagine presa dal web) e non grigio o bianco!

    Mi serve assolutamente...rispondetemi massimo entro domani o iniziero' un flood progressivo del forum senza precedenti.

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Originariamente inviato da Caturzlo
    Mi serve assolutamente...rispondetemi massimo entro domani o iniziero' un flood progressivo del forum senza precedenti.
    Per favore, evita queste "sparate": le domande qui hanno tutte la stessa urgenza e, in ogni caso, se vuoi continuare a ricevere aiuto dal forum, dubito che la pratica che stai minacciando sarà di aiuto.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Rimarco anch'io l'avviso del collega alka.

    Per quanto riguarda il problema, a suo tempo ho avuto anch'io questa necessità: mi sono rimboccato le maniche e mi sono scritto una classe Border personalizzata.
    codice:
    import javax.swing.border.*;
    import java.awt.*;
    
    public class BordoFine extends AbstractBorder {
       private int tipo;
       private Insets insets;
    
       public static final int RIALZATO = 0;
       public static final int INCASSATO = 1;
    
       public BordoFine(int tipo) {
          this.tipo = tipo;
          insets = new Insets(0, 0, 0, 0);
       }
    
       public BordoFine(int tipo, Insets insets) {
          this.tipo = tipo;
          this.insets = insets;
       }
    
       public void paintBorder(Component c, Graphics g, int x, int y, int larghezza, int altezza) {
          if (tipo == RIALZATO) {
             disegnaBordoRialzato(c, g, x, y, larghezza, altezza);
          }
          if (tipo == INCASSATO) {
             disegnaBordoIncassato(c, g, x, y, larghezza, altezza);
          }
       }
    
       public Insets getBorderInsets(Component c) {
          return insets;
       }
    
       public Insets getBorderInsets(Component c, Insets insets) {
          insets = this.insets;
          return insets;
       }
    
       private void disegnaBordoRialzato(Component c, Graphics g, int x, int y, int larghezza, int altezza) {
          Color old = g.getColor();
    
          g.setColor(getColoreChiaro(c));
          g.drawLine(0, 0, 0, c.getHeight()-2);
          g.drawLine(1, 0, c.getWidth()-2, 0);
    
          g.setColor(getColoreScuro(c));
          g.drawLine(0, c.getHeight()-1, c.getWidth()-1, c.getHeight()-1);
          g.drawLine(c.getWidth()-1, c.getHeight()-1, c.getWidth()-1, 0);
    
          g.setColor(old);
       }
    
       private void disegnaBordoIncassato(Component c, Graphics g, int x, int y, int larghezza, int altezza) {
          Color old = g.getColor();
    
          g.setColor(getColoreScuro(c));
          g.drawLine(0, 0, 0, c.getHeight()-1);
          g.drawLine(1, 0, c.getWidth()-1, 0);
    
          g.setColor(getColoreChiaro(c));
          g.drawLine(1, c.getHeight()-1, c.getWidth()-1, c.getHeight()-1);
          g.drawLine(c.getWidth()-1, 1, c.getWidth()-1, c.getHeight()-2);
    
          g.setColor(old);
       }
    
       private Color getColoreChiaro(Component c) {
          return c.getBackground().brighter().brighter();
       }
    
       private Color getColoreScuro(Component c) {
          return c.getBackground().darker().darker();
       }
    }
    Si usa così:
    codice:
    // Ottengo un bordo rialzato
    tuoComponente.setBorder( new BordoFine(BordoFine.RIALZATO, new Insets(5, 5, 5, 5)) );
    
    // Ottengo un bordo incassato
    tuoComponente.setBorder( new BordoFine(BordoFine.INCASSATO, new Insets(5, 5, 5, 5)) );
    Ovviamente la puoi personalizzare per i colori (la classe prende quelli del componente e li adatta) e per i margini del bordo dal contenuto del componente (Insets).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Utente bannato
    Registrato dal
    Jul 2007
    Messaggi
    19
    mmmm....mi sembra un po esagerato per fare un semplice bordo a rilievo...tra l'altro, da quanto leggo nel tuo codice, non hai applicato nessuna immagine di sfondo...probabilmente avresti potuto usare il metodo "button.setBorder(BorderFactory.createRaisedBevelB order());"...questo metodo crea da solo un bordo rialzato solo che gli assegna il colore di sfondo che ha il pannello (e non l'immagine che ho messo io bensi cio che ho impostato alla stringa this.setBackground(Color.bg))...
    Ora spulciando le classi di java ho trovato un metodo che farebbe al caso mio..
    button.setBorder(BorderFactory.createBevelBorder(t ype, highlight, shadow) questo metodo e' simile al precedente ma ha piu parametri interessanti!!
    type = intero che specifica lo spessore del bordo
    highlight = accetta tipi di colore per la parte superiore sinistra del bordo
    shadow = accetta tipi di colore per la parte inferiore destra del bordo

    Domanda...sara' possibile passargli al posto di un colore l'immagine che ho impostato come sfondo??
    Domanda...nel caso la precedente fosse negativa sarebbe possibile fare un casting ed assegnare ad una variabile di tipo Color un Immagine??
    Domanda...nel caso entrambe fossero negative sarebbe possibile assegnare un immagine al Background?? (intendo con setBackground o roba del genere)

    P.S. riflettendo sul codice che mi hai postato ho anche tentato di fare Color sfondo = getBackgroundColor(this)/ getColor()/getColor(this)...ma mi ritorna sempre il colore monocromatico che imposto nel costruttore con setBackground()..

    Possibile che con tutte queste guide sul webdesign nessuno sappia risolvere (in maniera ottimale) questo semplice problema??
    Ti ringrazio comunque lele per il tuo intervento

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da Caturzlo
    mmmm....mi sembra un po esagerato per fare un semplice bordo a rilievo
    Se ti sembra esagerato, vatti a vedere il sorgente della BorderFactory...
    ...tra l'altro, da quanto leggo nel tuo codice, non hai applicato nessuna immagine di sfondo...probabilmente avresti potuto usare il metodo "button.setBorder(BorderFactory.createRaisedBevelB order());"...questo metodo crea da solo un bordo rialzato solo che gli assegna il colore di sfondo che ha il pannello (e non l'immagine che ho messo io bensi cio che ho impostato alla stringa this.setBackground(Color.bg))...
    Probabilmente l'effetto che si ottiene con la BorderFactory non era esattamente quello che volevo ottenere io... tra l'altro, l'immagine del pulsante non ha nulla a che vedere con il borde (rileggiti la documentazione)
    Ora spulciando le classi di java ho trovato un metodo che farebbe al caso mio..
    button.setBorder(BorderFactory.createBevelBorder(t ype, highlight, shadow) questo metodo e' simile al precedente ma ha piu parametri interessanti!!
    type = intero che specifica lo spessore del bordo
    highlight = accetta tipi di colore per la parte superiore sinistra del bordo
    shadow = accetta tipi di colore per la parte inferiore destra del bordo

    Domanda...sara' possibile passargli al posto di un colore l'immagine che ho impostato come sfondo??
    Anche qui, l'immagine di sfondo non c'entra nulla col bordo...
    Domanda...nel caso la precedente fosse negativa sarebbe possibile fare un casting ed assegnare ad una variabile di tipo Color un Immagine??
    Non ho parole... Ovvio che no! Sono due cose diverse...
    Domanda...nel caso entrambe fossero negative sarebbe possibile assegnare un immagine al Background?? (intendo con setBackground o roba del genere)
    Ma la documentazione della classe JButton fa così schifo? Mai visto il metodo setIcon()?
    P.S. riflettendo sul codice che mi hai postato ho anche tentato di fare Color sfondo = getBackgroundColor(this)/ getColor()/getColor(this)...ma mi ritorna sempre il colore monocromatico che imposto nel costruttore con setBackground()..
    Infatti io ho detto che era possibile personalizzarla, ma bisogna studiare un pochino per sapere come modificarla...
    Possibile che con tutte queste guide sul webdesign nessuno sappia risolvere (in maniera ottimale) questo semplice problema??
    Certo, ma se documentarsi è così difficile...
    Ti ringrazio comunque lele per il tuo intervento
    Ma non c'è di che...

    PS: Il codice che ti ho postato è una piccola parte della mia tesi di laurea... credi che se ci fosse stato qualcosa di già pronto all'uso mi sarei fatto un mazzo tale?

    Certa gente proprio non la capisco...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.