[Java] limite destro di un JFrame

paolo-55

Nuovo Utente
5 Feb 2019
5
0
1
facendo muovere una figura in un JFrame, per simulare il movimento di una pallina, trovo che il limite destro sembra spostato indietro di 20 pixel.
la stessa cosa non accade per il limite sinistro.

per rilevare il limite della finestra uso frame.getWidth() e calcolo il momento del rimbalzo decrementando questo valore della dimensione della pallina.

qualcuno mi sa spiegare la ragione?

grazie in anticipo.
Paolo
 

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.007
295
83
Devi postare il codice o il link alla pagina
 

paolo-55

Nuovo Utente
5 Feb 2019
5
0
1
Questo è il codice utilizzato.
ho provato a compensare(riga 18), ma non capisco da cosa dipenda.
Codice:
    import java.awt.Color;
    import java.awt.Container;
    import java.awt.Graphics;
    import java.awt.GridLayout;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    public class figuraInMovimento{
        public static Fr f;
        public static int q;
        public static void main(String[] args){
            f=new Fr();
            Container c=f.getContentPane();    //recupera il container dalla gerarchia
            Pan p=new Pan();        //crera un pannello
            c.add(p);
            f.setLayout(new GridLayout());
            f.setVisible(true);
            while(true){
                q=(int)f.getWidth()-20;//QUI CONSIDERO LA DIFFERENZA DI 20 PIXEL
                if(p.x>=q-50) //50 è la dimensione del diametro del cerchio
                    p.dir=p.dir*(-1);
                if(p.x<=0)
                    p.dir=p.dir*(-1);
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                       e.printStackTrace();
                }
                f.repaint();
            }
        }
      
    }
    class Fr extends JFrame{
        public Fr(){
            super("figura in movimento");
            setBounds(300,300,300,300); 
            setBackground(Color.blue);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
    }
    class Pan extends JPanel{
        int x=1;
        int dir=1;
        public void paintComponent(Graphics g){//metodo che disegna
            int q=figuraInMovimento.q;
            g.setColor(Color.red);
            g.drawString("dir= "+dir+", x= "+x+"finestra= "+q , 10, 10);
            g.drawString("margine sinistro a "+(x+50) , 10, 30);
            g.setColor(Color.blue);
            g.fillOval(x+dir, 100, 50, 50);//SFERA CHE SI MUOVE, CANCELLAZIONE DELLA POSIZIONE CORRENTRE
            g.setColor(Color.red);
            g.fillOval(x, 100, 50, 50);//RISCRITTURA IN NUOVA POSIZIONE
            x+=dir;
        }
    }
 
Ultima modifica di un moderatore:

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.007
295
83
@paolo-55
Da regolamento del forum, come tutti noi sei tenuto ad usare il tag
o il tag
per il PHP, quando posti del codice, oppure la funzione codice dalla barra degli strumenti

Inoltre ti prego di leggere attentamente il regolamento generale del forum e quello di sezione dove posti
Grazie
Per questa volta te lo sistemo io ma mi raccomando per il futuro
 

paolo-55

Nuovo Utente
5 Feb 2019
5
0
1
mi scuso per la disattenzione e cercherò di non ripetere l'errore. Non sono molto abituato a frequentare i forum.
Ma sembra, da quello che scrivi, che io abbia sbagliato anche la sezione che invece mi sembra corretta, mentre invece credo che sia quella giusta.
 

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.007
295
83
Se leggi bene non ho neanche accennato alla sezione o detto che ha sbagliato!