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

    [Java] Problemi nella visualizzazione (repaint non aggiorna correttamente)

    Salve ho problemi con questo codice:

    codice:
    import java.awt.*; import javax.swing.*; import java.awt.event.*;  public class restoform extends JFrame { int pa,r,b50,b20,b10,b5,m2,m1; Toolkit tool = Toolkit.getDefaultToolkit();  JLabel l1 = new JLabel("Importo:"); JTextField tf=new JTextField(5); JButton Bottone=new JButton("Calcola il resto");  JPanel p1 = new JPanel(); JPanel p2 = new JPanel(); restoform() { tf.setText("0"); setSize(400,500); setVisible(true); setLayout(null); setResizable(false);  add(p1); add(p2); p1.setLayout(null); p2.setLayout(null); p1.setBounds(0,0,350,100); p2.setBounds(0,100,350,300);  p1.add(l1); l1.setBounds(20,40,100,20);  p1.add(tf); tf.setBounds(70,40,100,20);  p1.add(Bottone); Bottone.setBounds(175,40,150,20); Bottone.addActionListener(new GestisceBottone()); } public void paint(Graphics g) {  Image banconota50 = tool.getImage("banconota50.jpg"); g.drawImage(banconota50, 10,200,p2); g.drawString(""+b50,140,220);  Image banconota20 = tool.getImage("banconota20.jpg"); g.drawImage(banconota20, 10,300,p2); g.drawString(""+b20,140,320);  Image banconota10 = tool.getImage("banconota10.jpg"); g.drawImage(banconota10, 10,400,p2); g.drawString(""+b10,140,420);  //seconda colonna  Image banconota5 = tool.getImage("banconota5.jpg"); g.drawImage(banconota5, 250,200,p2); g.drawString(""+b5,200,220);  Image moneta2 = tool.getImage("moneta2.jpg"); g.drawImage(moneta2, 250,300,p2); g.drawString(""+m2,200,320);  Image moneta1 = tool.getImage("moneta1.jpg"); g.drawImage(moneta1, 250,400,p2); g.drawString(""+m1,200,420);  } private class GestisceBottone implements ActionListener {  public void actionPerformed (ActionEvent e) {  pa=Integer.parseInt(tf.getText()); r=pa; b50=0; b20=0; b10=0; b5=0; m2=0; m1=0; while(r!=0) { if(r>=50) { r=r-50; b50=b50+1; } else { if(r>=20) { r=r-20; b20=b20+1; } else { if(r>=10) { r=r-10; b10=b10+1; } else { if(r>=5) { r=r-5; b5=b5+1; } else { if(r>=2) { r=r-2; m2=m2+1; } else { r=r-1; m1=m1+1; } } } } } }  tf.setText("0"); repaint(); } }     public static void main (String args []) {  new restoform();  }  }
    In pratica non dà errori, ma mi dà grossi problemi nella visualizzazione.
    Inoltre quando premo il bottone e lancia il repaint, invece di ridisegnare disegna le stringhe da sopra... Come risolvo?

    Grazie già da ora per l'aiuto.

  2. #2
    Utente di HTML.it L'avatar di yuno
    Registrato dal
    Apr 2010
    Messaggi
    62
    ciao, scusa ma il codice potresti postarlo meglio in questo modo è praticamente illegibile...
    poi potresti magari esporre meglio il problema, magari o io o qualcuno più bravo, ti potrebbe aiutare più facilmente

  3. #3
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;

    public class restoform extends JFrame
    {
    int pa,r,b50,b20,b10,b5,m2,m1;
    Toolkit tool = Toolkit.getDefaultToolkit();


    JLabel l1 = new JLabel("Importo:");
    JTextField tf=new JTextField(5);
    JButton Bottone=new JButton("Calcola il resto");

    restoform()
    {
    tf.setText("0");
    setSize(400,500);
    setVisible(true);
    setLayout(null);
    setResizable(false);


    add(l1);
    l1.setBounds(20,40,100,20);

    add(tf);
    tf.setBounds(70,40,100,20);

    add(Bottone);
    Bottone.setBounds(175,40,150,20);
    Bottone.addActionListener(new GestisceBottone());
    }
    public void paint(Graphics g)
    {

    Image banconota50 = tool.getImage("banconota50.jpg");
    g.drawImage(banconota50, 10,200,this);
    g.drawString(""+b50,140,220);

    Image banconota20 = tool.getImage("banconota20.jpg");
    g.drawImage(banconota20, 10,300,this);
    g.drawString(""+b20,140,320);

    Image banconota10 = tool.getImage("banconota10.jpg");
    g.drawImage(banconota10, 10,400,this);
    g.drawString(""+b10,140,420);

    //seconda colonna

    Image banconota5 = tool.getImage("banconota5.jpg");
    g.drawImage(banconota5, 250,200,this);
    g.drawString(""+b5,200,220);

    Image moneta2 = tool.getImage("moneta2.jpg");
    g.drawImage(moneta2, 250,300,this);
    g.drawString(""+m2,200,320);

    Image moneta1 = tool.getImage("moneta1.jpg");
    g.drawImage(moneta1, 250,400,this);
    g.drawString(""+m1,200,420);

    }
    private class GestisceBottone implements ActionListener
    {

    public void actionPerformed (ActionEvent e)
    {

    pa=Integer.parseInt(tf.getText());
    r=pa;
    b50=0;
    b20=0;
    b10=0;
    b5=0;
    m2=0;
    m1=0;
    while(r!=0)
    {
    if(r>=50)
    {
    r=r-50;
    b50=b50+1;
    }
    else
    {
    if(r>=20)
    {
    r=r-20;
    b20=b20+1;
    }
    else
    {
    if(r>=10)
    {
    r=r-10;
    b10=b10+1;
    }
    else
    {
    if(r>=5)
    {
    r=r-5;
    b5=b5+1;
    }
    else
    {
    if(r>=2)
    {
    r=r-2;
    m2=m2+1;
    }
    else
    {
    r=r-1;
    m1=m1+1;
    }
    }
    }
    }
    }
    }

    tf.setText("0");
    repaint();

    }
    }




    public static void main (String args [])
    {

    new restoform();


    }

    }

    Ecco a voi.
    Il problema lo ho esposto gia in precedenza.
    Studio Java a scuola da poco, e ho fatto tranquillamente programmi con Gui e Canvas ma SEPARATAMENTE.

    Adesso il prof. c'ha dato questo esercizio in cui dovevamo inserire immagini nella stessa finestra in cui si trovava l'input.

    Se sapete come migliorarlo ve ne sarei grato
    (Vi invito a compilarlo ed eseguirlo voi stessi per notare di cosa sto parlando)

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    il codice così è meno leggibile di prima.
    Il pulsante code mette tutto su una sola riga, quindi scrivi [ code ] [ /code ] (senza gli spazi dalle parentesi quadre) e il mezzo metti il tuo codice.

    Se hai un problema, evidenzia il punto in cui lo riscontri, non tutto il codice sperando che qualcuno compili e risolva per te.
    Che problemi di visualizzazione?
    dove fai repaint? evidenza innanzitutto questo
    RTFM Read That F*** Manual!!!

  5. #5
    Ok.

    Innanzitutto c'è da dire che ho esteso per comodità il JFrame, così da non dover creare la finestra. Ma anche con Canvas, il risultato era lo stesso.

    Il programma si compone di un'etichetta, una casella di testo e un bottone, alla pressura del quale parte il repaint:

    codice:
    public void actionPerformed (ActionEvent e)
    {
    
    ...roba...
    
    tf.setText("0");
    repaint();
    
    }
    I 3 elementi sopracitati:
    codice:
    JLabel l1 = new JLabel("Importo:");
    JTextField tf=new JTextField(5);
    JButton Bottone=new JButton("Calcola il resto");
    si vedono correttamente se non lancio il paint.
    (Ho provato a togliere tutto il metodo che disegna le banconote e il numero e funzionava)

    La mia domanda è, come mai l'etichetta scompare e la casella di testo si vede solo in parte se c'è il paint nella stessa finestra?
    Se ho sbagliato qualcosa nella struttura, come potrei migliorare?
    Spero di essere stato chiaro questa volta... scusate ancora

    EDIT:
    a quasi dimenticavo... quando fa il repaint invece di aggiornare il disegno gli scrive da sopra!
    Ecco il codice:
    codice:
    public void paint(Graphics g)
    {
    
    Image banconota50 = tool.getImage("banconota50.jpg");
    g.drawImage(banconota50, 10,200,this);
    g.drawString(""+b50,140,220);
    
    Image banconota20 = tool.getImage("banconota20.jpg");
    g.drawImage(banconota20, 10,300,this);
    g.drawString(""+b20,140,320);
    
    Image banconota10 = tool.getImage("banconota10.jpg");
    g.drawImage(banconota10, 10,400,this);
    g.drawString(""+b10,140,420);
    
    //seconda colonna
    
    Image banconota5 = tool.getImage("banconota5.jpg");
    g.drawImage(banconota5, 250,200,this);
    g.drawString(""+b5,200,220);
    
    Image moneta2 = tool.getImage("moneta2.jpg");
    g.drawImage(moneta2, 250,300,this);
    g.drawString(""+m2,200,320);
    
    Image moneta1 = tool.getImage("moneta1.jpg");
    g.drawImage(moneta1, 250,400,this);
    g.drawString(""+m1,200,420);
    
    }

  6. #6
    EDIT:
    Ho risolto tutto ragazzi grazie lo stesso.
    E' bastato integrare tutto in un JPanel contenuto in un JFrame.
    Il paint scriveva da sopra perché bisognava aggiornare la finestra!
    Nel paint, ho aggiunto questo codice:
    finestra.repaint();
    E adesso tutto funziona!!

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.