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

    [Java] Stampare Stringa su Finestra!

    Non ricordo più come fare per usare il metodo repaint/paint/update:
    Qui un tentativo mal riuscito...

    codice:
        import java.awt.*;    
        import java.awt.Graphics;
        import java.awt.Image;
        import javax.swing.*;  
          
        public class Finestra extends JFrame {
            
        
           public static void main(String [] args) {         
                  
                    Finestra F = new Finestra();   
                    
           }  
          
           
           public Finestra(){
           
            setSize(500, 500);  
                                        
            setVisible(true); 
            
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
            
            Graphics g = getGraphics();
            
            g.create();
            
            g.setColor(Color.BLACK);
            
            g.setFont(Font.decode(Font.SANS_SERIF));
            
            g.drawString("Hello Word!", 100, 100);
            
            g.dispose();
            
            update(g);
            
            repaint(100, 0, 0, 500, 500); 
                     
                    
           }               
    
      
       }
    Brutta memoria...
    jabjoint

  2. #2

    [Java] Scrivere su form(o JPanel?) un testo.

    Nulla da dire...eccetto che era word=world

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da jabjoint Visualizza il messaggio
    Non ricordo più come fare per usare il metodo repaint/paint/update:
    Qui un tentativo mal riuscito...
    No, non si fa così, perché anche se disegnasse qualcosa, non sarebbe "persistente" perché non è nel "contesto" giusto per il painting.
    In Swing il "contesto" di disegno è nel metodo paintComponent(Graphics).

    Il modo più semplice (e appropriato) è:

    codice:
    import java.awt.Graphics;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;
    
    public class FrameProva extends JFrame {
        public FrameProva() {
            super("Prova");
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            setSize(300, 200);
            add(new PaintPanel());
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(() -> new FrameProva().setVisible(true));
        }
    }
    
    class PaintPanel extends JPanel {
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawString("Ciao", 20, 30);
        }
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  4. #4
    @andbin Grazie.
    jabjoint

  5. #5
    "SwingUtilities" è necessario?

    Ho provato col classico "new" e funziona ma ho problemi:

    Infatti se piazzo una variabile: boolean started=true, non riesco ad ottenere un codice nel "paintComponent" che parta solo come prima impostazione(started=true)...
    jabjoint

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    [Non ho capito nulla
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Quote Originariamente inviata da oregon Visualizza il messaggio
    [Non ho capito nulla

    codice:
       public static void main(String[] args) {
            SwingUtilities.invokeLater(() -> new FrameProva().setVisible(true));
        }
    Prima domanda:

    1. Qual è l'utilità di: "SwingUtilities.invokeLater(()->....)"

    Seconda:

    2. Se nel codice seguente inserisco una variabile START per controllare la prima esecuzione(deve stampare la grafica a video solo una volta al primo lancio):

    codice:
      @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            if (START){
            g.drawString("Ciao", 20, 30);
            START = false;
             }
             else {
             //fai altro
             }
    
        }
    Non disegna nulla...
    Ultima modifica di jabjoint; 19-06-2022 a 10:07
    jabjoint

  8. #8
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    954
    Quote Originariamente inviata da jabjoint Visualizza il messaggio
    codice:
       public static void main(String[] args) {
            SwingUtilities.invokeLater(() -> new FrameProva().setVisible(true));
        }
    Prima domanda:

    1. Qual è l'utilità di: "SwingUtilities.invokeLater(()->....)"

    Seconda:

    2. Se nel codice seguente inserisco una variabile START per controllare la prima esecuzione(deve stampare la grafica a video solo una volta al primo lancio):

    codice:
      @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            if (START){
            g.drawString("Ciao", 20, 30);
            START = false;
             }
             else {
             //fai altro
             }
    
        }
    Non disegna nulla...
    Ciao,
    provo a rispondere alle tue domande.

    La 1: viene chiamato l'InvokeLater in modo da disegnare quando è stata completata la creazione del pannello

    La 2: bisogna vedere come è stata istanziata la variabile START.

    In ogni caso, ti allego questo link, è un PDF, dove racconta l'uso di Paint, Repaint etc..

    https://web.stanford.edu/class/archi...intRepaint.pdf

  9. #9
    Quote Originariamente inviata da Joe Taras Visualizza il messaggio
    Ciao,
    provo a rispondere alle tue domande.

    La 1: viene chiamato l'InvokeLater in modo da disegnare quando è stata completata la creazione del pannello

    La 2: bisogna vedere come è stata istanziata la variabile START.

    In ogni caso, ti allego questo link, è un PDF, dove racconta l'uso di Paint, Repaint etc..

    https://web.stanford.edu/class/archi...intRepaint.pdf
    Si è chiaro l'invokeLater, è utilissimo in realtà altrimenti capita che stampa il disegno prima e non si vede nulla.
    jabjoint

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 © 2024 vBulletin Solutions, Inc. All rights reserved.