Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    37

    scrivere su più Jframe contemporaneamente

    ciao a tutti..
    ho un problema..

    io ho creato un programma che ad un certo momento mi apre 2 o + frame sui quali posso disegnare mediante il mouse,il punto è:
    quando disegno sul frame 1 voglio che lo stesso disegno venga riprodotto anche sui frame 2,3,4 ecc
    come posso fare?

    grazie!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da maxnanus Visualizza il messaggio
    io ho creato un programma che ad un certo momento mi apre 2 o + frame sui quali posso disegnare mediante il mouse,il punto è:
    quando disegno sul frame 1 voglio che lo stesso disegno venga riprodotto anche sui frame 2,3,4 ecc
    come posso fare?
    Dipende cosa/dove/come disegni .... ad esempio: disegni su una immagine (BufferedImage) che tieni in memoria? Allora potrebbe essere condivisa tra i vari frame. Senza sapere cosa hai fatto non posso dire più di tanto ....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    37
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Dipende cosa/dove/come disegni .... ad esempio: disegni su una immagine (BufferedImage) che tieni in memoria? Allora potrebbe essere condivisa tra i vari frame. Senza sapere cosa hai fatto non posso dire più di tanto ....

    si ho bufferedimage

    codice:
    public PaintPanel(String titolo) {
            setPreferredSize(new Dimension(SIZE, SIZE));
            setBackground(Color.WHITE);
            addMouseMotionListener(this);
            addMouseListener(this);
            this.titolo = titolo;
    
    
        }
    
    
        public void paintComponent(Graphics g) {
            super.paintComponents(g);
            Graphics2D g2 = (Graphics2D) g;
    
    
            if (_bufImage == null) {
                int w = this.getWidth();
                int h = this.getHeight();
                _bufImage = (BufferedImage) this.createImage(w, h);
                Graphics2D gc = _bufImage.createGraphics();
                gc.setColor(COLOR_BACKGROUND);
                gc.fillRect(0, 0, w, h);
    
    
            }
            g2.drawImage(_bufImage, null, 0, 0);
        }
    
    
        private void drawCurrentShape(Graphics2D g2) {
            g2.setColor(COLOR_FOREGROUND);
            g2.drawLine(x, y, x, y);
    
    
        }
    
    
        public void mouseDragged(MouseEvent e) {
    
    
            x = e.getX();
            y = e.getY();
            drawCurrentShape(_bufImage.createGraphics());
            percorso = percorso.concat(String.valueOf(x).concat(",")
                    .concat(String.valueOf(y)).concat(","));
            repaint();
    
    
        }
    
    
        public void mousePressed(MouseEvent e) {
            x = e.getX();
            y = e.getY();
            percorso = String.valueOf(x).concat(",").concat(String.valueOf(y))
                    .concat(",");
    
    
        }
    public void mouseReleased(MouseEvent e) {
    
    
            percorso = percorso.substring(0, percorso.length() - 1);
            Stub.out.println("insert_way " + percorso + " " + titolo);
            System.out.println(percorso);
            System.out.println(titolo);
        }

    salvo il percorso che disegno su un database ogni volta che rilascio il mouse..
    e questi punti devono essere riprodotti su altri frame
    Ultima modifica di LeleFT; 16-01-2014 a 13:49 Motivo: Aggiunti i tag CODE

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2013
    Messaggi
    37
    qualcuno?

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da maxnanus Visualizza il messaggio
    e questi punti devono essere riprodotti su altri frame
    Dal punto di vista del "design", sarebbe buono avere una "entità" (oggetto) che faccia da mediatore tra i frame, in modo che nessuno dei frame "sappia" direttamente degli altri.
    Questo oggetto potrebbe o essere passato ai frame (da costruttore) oppure sfruttare il pattern singleton, in modo che ciascun frame possa estrarre la instanza "singleton".

    Una volta che il frame ha il riferimento al mediatore, dovrebbe potersi "registrare" per ottenere notifiche. Per fare la cosa con un buon design, sarebbe meglio basarsi su una interfaccia, per astrarre i frame dal mediatore. I frame dovrebbero implementare una tua interfaccia che definisce solo il metodo per effettuare la notifica. Quindi il mediatore "sa" solo della interfaccia e non dei frame.

    Se usi un BufferedImage come "buffer" per il disegno permanente, potrebbe essere il mediatore a tenere la immagine. Quando un frame vuole disegnare, chiede l'immagine al mediatore, ci disegna sopra e poi chiede al mediatore di notificare gli altri frame. Il mediatore invocherà il metodo di notifica (attraverso la interfaccia) su tutti gli altri frame, che quindi prenderanno l'immagine e la disegneranno.

    Quanto ho detto, è solo una ipotesi/possibilità, detta molto in generale, senza scendere nei dettagli e senza considerare aspetti "critici" di sincronizzazione e/o di ottimizzazione. Aspetti che dovresti valutare comunque tu.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.