Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [Java e JLabel] Strano comportamento!

    Salve ragazzi,
    vi espongo il mio problema!
    Ho realizzato un JFrame con al suo interno due JPanel. in uno di questi JPanel vi è una label con del testo, che devo rendere scorrevole. il pannello e la label in questione devono avere il background trasparente, per permettere la visualizzazione dell'altro pannello.
    Fin qui nessun problema.
    Ora, la label deve muoversi, tipo messaggio scorrevole. sono riuscito a realizzare anche questo, però quando si muove si lascia una scia delle parole, che quindi scorrendo diventa una striscia continua, oscurando completamente il testo! se dò un colore di background alla label o al pannello invece, tutto torna ok! e il messaggio rimane chiaro! qualcuno sa spiegarmi perchè? a me servirebbe soltanto questa label contenente il messaggio che si muove^^

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Non vedendo nemmeno una riga di codice non si può sapere che tipo di gestione hai fatto per far "scorrere" la label, quindi non credo che qualcuno possa nemmeno lontanamente immaginare quale possa essere il problema...


    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

  3. #3
    si avete ragione scusate vi posto sotto la classe:

    codice:
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    /**
     *
     * @author Nicholas
     */
    
    class MexScorrevole {
        static JLabel mex;
        static Timer timer;
        static JPanel pannello=new JPanel();
        static int posX=0;
        static int posY=0;
        static int larghezza=0;
        static int altezza=0;
        static int off=3;
        static int panelW=0;
        static int panelH=0;
        static int x1 = 0;
        static int x2 = 0;
        static int y1 = 0;
        static int y2 = 0;
        static int labelW=0;
        static int labelH=0;
    
    
        public static void disegnaMex(String messaggio,int vel,int pX,int pY,int larg,int alt,int foreGround,int align,String styleFont,int sizeFont,int bold){
            pannello.setLayout(null);
            //dimensioni e posizione jpanel
            pannello.setBounds(pX,pY,larg,alt);
            //pannello.setOpaque(false);
            pannello.setBackground(new Color(0,0,0,0));
            pannello.setOpaque(true);
            //pannello.setBackground(Color.black);
            Font font = null;
            if(bold!=0){
                font=new Font(styleFont,Font.BOLD,sizeFont);
            }
            else if(bold==0){
                font=new Font(styleFont,Font.PLAIN,sizeFont);
            }
            if(align==2){
                mex = new JLabel(messaggio,JLabel.CENTER);
            }
            else{
                mex = new JLabel(messaggio);
            }
            //setto font
            mex.setFont(font);
            int b=(foreGround>>16)&255;
            int g=(foreGround>>8)&255;
            int r=(foreGround)&255;
            Color colorText=new Color(r,g,b);
            //setto colore foreground
            mex.setForeground(colorText);
            //setto colore background trasparente
            mex.setBackground(new Color(0,0,0,0));
            //abilito opacita
            mex.setOpaque(true);
            //prendo dimensioni label
            mex.setSize(mex.getPreferredSize());
            //calcolo meta larghezza pannello
            panelW=pannello.getWidth()/2;
            //calcolo meta altezza pannello
            panelH=pannello.getHeight()/2;
            //calcolo meta larghezza label
            labelW=mex.getWidth()/2;
            //calcolo meta altezza label
            labelH=mex.getHeight()/2;
            //calcolo posX
            posX=panelW-labelW;
            //calcolo posY
            posY=panelH-labelH;
            
            vel=vel*10;
            timer = new Timer (vel,new ActionListener (){
                public void actionPerformed (ActionEvent e){
                    posX=posX-off;                
                    if(posX<=-mex.getWidth()){                    
                       posX=pannello.getWidth();
                    }
                    mex.setLocation(posX,20);
                    pannello.repaint();
                }
            });
            timer.start ();
            pannello.add (mex);
            MyTimerTask.framePrincipale.add(pannello);        
        }
    }

  4. #4

    [RISOLTO]

    ho risolto ragazzi, grazie comunque per chi ci ha dato anche solo un'occhiata!

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.