Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Sony Xperia 1 VII: lo smartphone per gli appassionati di fotografia
Recensione Sony Xperia 1 VII: lo smartphone per gli appassionati di fotografia
Sony Xperia 1 VII propone un design sobrio e funzionale, con un comparto fotografico di ottimo livello caratterizzato da uno zoom continuo e prestazioni generali da top di gamma puro. Viene proposto con una personalizzazione software sobria e affidabile, ma presenta qualche criticità sul fronte ricarica rapida. Il dispositivo punta su continuità stilistica e miglioramenti mirati, rivolgendosi al solito pubblico specifico del brand giapponese.
Attenti a Poco F7: può essere il best buy del 2025. Recensione
Attenti a Poco F7: può essere il best buy del 2025. Recensione
Poco F7 5G, smartphone che punta molto sulle prestazioni grazie al processore Snapdragon 8s Gen 4 e a un display AMOLED da ben 6,83 pollici. La casa cinese mantiene la tradizione della serie F offrendo specifiche tecniche di alto livello a un prezzo competitivo, con una batteria generosissima da 6500 mAh e ricarica rapida a 90W che possono fare la differenza per gli utenti più esigenti.
Recensione Samsung Galaxy Z Fold7: un grande salto generazionale
Recensione Samsung Galaxy Z Fold7: un grande salto generazionale
Abbiamo provato per molti giorni il nuovo Z Fold7 di Samsung, un prodotto davvero interessante e costruito nei minimi dettagli. Rispetto al predecessore, cambiano parecchie cose, facendo un salto generazionale importante. Sarà lui il pieghevole di riferimento? Ecco la nostra recensione completa.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 01-04-2007, 10:58   #1
spillo491
Member
 
Iscritto dal: Dec 2006
Messaggi: 201
Come si fa ?

Ciao a tutti devo realizzare un programma ma non so da che parte incominciare:

devo costruire una griglia con assi numerati e dare la possibilità all'utente di indicare dei punti su di essa. In particolare:
1 click --> pallino su griglia
2 click --> croce su griglia
In base alle regioni della griglia in cui si hanno pallini e croci il programma deve elaborare i dati e dare un uscita secondo una funzione conosciuta

Mi sapete dare qualche idea ?

Io so programmare un po in java e so usare Matlab
spillo491 è offline   Rispondi citando il messaggio o parte di esso
Old 13-04-2007, 12:43   #2
spillo491
Member
 
Iscritto dal: Dec 2006
Messaggi: 201
Nessuno mi sa dare un'idea su come procedere ?
spillo491 è offline   Rispondi citando il messaggio o parte di esso
Old 13-04-2007, 13:40   #3
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
E' difficile darti un'idea senza offrire anche la soluzione completa dell'esercizio.

Potresti iniziare creando un oggetto Griglia che conservi una matrice di oggetti Simbolo (PALLINO o CROCE).

Dai alla griglia la capacità di modificare il valore di una delle sue celle.

Crea un ascoltatore di eventi prodotti dalla griglia.

Quando la griglia subisce la modifica di una delle sue celle, dopo aver immagazzinato la modifica, le fai sparare un evento in direzione di tutti gli ascoltatori registrati.

Crea un pannello che proietti sullo schermo i dati della griglia. Dota questo pannello di un ascoltatore di eventi che sia connesso alla griglia.

Quando questo ascoltatore riceverà un evento dalla griglia, proietterà sullo schermo le modifiche intervenute (un pallino o una crocetta nella posizione stabilita per la cella modificata).

Quando giunge il momento di calcolare la funzione, prendi la griglia e la passi ad un oggetto, chiamiamolo Processore, che analizza i valori delle celle e, in base ad una logica da te stabilita, produca la Funzione.

E' più facile a farsi che a dirsi.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 13-04-2007, 13:47   #4
spillo491
Member
 
Iscritto dal: Dec 2006
Messaggi: 201
Grazie mille PGI, a me non sembra poi cosi facile perchè sono alle basi della programmazione però ci provo.
Quindi posso fare tutto in java ?
spillo491 è offline   Rispondi citando il messaggio o parte di esso
Old 13-04-2007, 13:53   #5
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Yesssss. Tu prova. Se incontri difficoltà chiedi.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2007, 10:35   #6
spillo491
Member
 
Iscritto dal: Dec 2006
Messaggi: 201
Ma in pratica devo realizzare un APPLET ?
spillo491 è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2007, 10:48   #7
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da spillo491 Guarda i messaggi
Ma in pratica devo realizzare un APPLET ?
Se deve stare dentro una pagina HTML, sì. Altrimenti crei una normale applicazione. Puoi stabilirlo tu, se non ti sono state date precise specifiche.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2007, 10:53   #8
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Non lo so ma sospetto di no.

Un Applet Java è un programma eseguito all'interno di un web browser distribuito attraverso una pagina html.

Eventualmente è dotato di un'interfaccia grafica utente che può apparire come una finestra o come un elemento dinamico della pagina html.

Io penso che tu voglia o deva realizzare un programma stand-alone: autonomo, dove l'autonomia vale "non serve il web browser".

Dunque, niente Applet.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2007, 10:55   #9
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
Ci sarebbe appletviewer.
lovaz è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2007, 11:07   #10
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
appletviewer è uno strumento di sviluppo incluso nel JDK che non appartiene alla piattaforma Java standard.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2007, 11:10   #11
spillo491
Member
 
Iscritto dal: Dec 2006
Messaggi: 201
Si avete ragione, io non voglio un programma che sia eseguito da un web browser ma un programma stand alone.
Quindi questo codice che avevo trovato in rete non posso riutilizzarlo ?

import java.awt.*;

public class DrawAndClick extends java.applet.Applet {

//

public boolean mouseDown(Event e, int x, int y) {

// il metodo getGraphics() della classe BufferedImage
// restituisce un oggetto Graphics
Graphics g = getGraphics();
g.fillRect(x-2,y-2,4,4);

return true;
}

public void paint(Graphics g) {

int i, j;

// Disegno una griglia con assi che vanno da 0 a 300
// Ogni quadratino ha lato 30

for(i=0; i<=300; i=i+30) {
// disegna le linee verticali della griglia
//public void drawLine(int x1, int y1, int x2, int y2)
g.drawLine(0,i,300,i);
// disegna le linee orizzontali della griglia
g.drawLine(i,0,i,300);
}
}

}
spillo491 è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2007, 11:17   #12
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
Quote:
Originariamente inviato da PGI-Bis Guarda i messaggi
appletviewer è uno strumento di sviluppo incluso nel JDK che non appartiene alla piattaforma Java standard.
Non sapevo...

Comunque puoi facilmente convertire quell'applet in applicazione,
vedi ad esempio qui:
http://www.rgagnon.com/javadetails/java-0305.html
Aggiungi una J davanti a Panel, Frame, Button...

Ultima modifica di lovaz : 16-04-2007 alle 11:24.
lovaz è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2007, 11:28   #13
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Occhio che quel codice non solo e non tanto è vecchio (Java 1.1) ma fa un uso non corretto della pipeline di rendering di Java.

Se mi dai 5 minuti butto giù un esempio di griglia. So che, essendo un esercizio scolastico, potrebbe sembrare non corretto ma se non v'hanno spiegato nulla di interfacce grafiche utente, disegno e Swing tanto vale prendere l'esercizio come primo passo in quest'universo. Comunque scrivo solo una traccia, un indizio.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2007, 11:32   #14
spillo491
Member
 
Iscritto dal: Dec 2006
Messaggi: 201
Ok grazie
spillo491 è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2007, 11:46   #15
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
Effettivamente fa un po' schifo...
colpa della mia pigrizia, ho messo il primo link di google
lovaz è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2007, 11:49   #16
spillo491
Member
 
Iscritto dal: Dec 2006
Messaggi: 201
Ma credo si riferisca al mio codice
spillo491 è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2007, 13:11   #17
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
M'è venuto non breve ma piuttosto esplicito.

Con pallini e crocette.

Codice PHP:
/** Rappresentazione di un tipo di dato "Simbolico" */
public enum Simbolo {
    
VUOTO,
    
PALLINO,
    
CROCE

mettiamo su una griglia:

Codice PHP:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

/** Rappresentazione di una griglia di simboli. */
public class Grid {
    
/* Numero di righe della griglia */
    
private final int numeroDiRighe;

    
/* Numero di colonne della griglia */
    
private final int numeroDiColonne;

    
/* Contenuto della griglia */
    
private final Simbolo[] celle;

    
/** Inizializza una griglia */
    
public Grid(int numeroDiRigheint numeroDiColonne) {
        
this.numeroDiRighe numeroDiRighe;
        
this.numeroDiColonne numeroDiColonne;
        
celle = new Simbolo[numeroDiRighe numeroDiColonne];
        
inizializzaCelle();
    }

    
/** Restituisce il numero di colonne che compongono questa griglia */
    
public int getNumeroDiColonne() {
        return 
numeroDiColonne;
    }

    
/** Restituisce il numero di righe che compongono questa griglia */
    
public int getNumeroDiRighe() {
        return 
numeroDiRighe;
    }

    
/** Restituisce il simbolo contenuto in una cella della griglia */
    
public Simbolo getSimboloCella(int indiceRigaint indiceColonna) {
        return 
celle[subscript(indiceRigaindiceColonna)];
    }

    
/** Imposta il simbolo contenuto in una cella della griglia */
    
public void setSimboloCella(Simbolo simboloint indiceRigaint indiceColonna) {
        
celle[subscript(indiceRigaindiceColonna)] = simbolo;
    }

    
/** Restituisce il numero di celle della griglia */
    
public int getNumeroDiCelle() {
        return 
celle.length;
    }

    
/** Restituisce la cella di indice subscript */
    
public Simbolo getSimboloCella(int indiceSubscript) {
        return 
celle[indiceSubscript];
    }

    
/* Calcola l'indice di accesso agli elementi di una matrice linearizzata */
    
public int subscript(int indiceRigaint indiceColonna) {
        return 
indiceRiga numeroDiColonne indiceColonna;
    }

    
/* inverso di subscript */
    
public void superScript(int indiceCellajava.awt.Point result) {
        
result.indiceCella numeroDiColonne;
        
result.indiceCella numeroDiColonne;
    }

    
/* Crea una matrice linearizzata e assegna ad ogni elemento un
    valore iniziale */
    
private void inizializzaCelle() {
        
java.util.Arrays.fill(celleSimbolo.VUOTO);
    }

Questa è una mezza vista. Ti risparmio l'architettura MVC anche se la griglia sarebbe un ottimo esempio di modello. DrawAndClick è un componente Swing (un componente è un pezzo di interfaccia grafica utente che si inserisce in un contenitore che va dentro ad una finestra) a cui è affidata, in cotruzione, una griglia (Grid) e che si occupa sia di disegnarla che di modificarla in seguito alla pressione di un pulsante del mouse.

Codice PHP:
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*; //contiene le definizioni delle figure geometriche vettoriali Java2D
import java.awt.event.*;
import java.awt.image.*;

/** Vista (e controllo) su una griglia */
public class DrawAndClick extends JComponent {
    
/* Un buffer fuori schermo per pre-calcolare il disegno della
    griglia. Assume un valore in initializeBackBuffer(), dopo addNotify(). */
    
private BufferedImage backBuffer;

    
/* La pipeline di rendering del buffer fuori schermo. Assume un
    valore in initializeBackBuffer(), dopo addNotify(). */
    
private Graphics2D backBufferGraphics;

    
/* Rappresentazione vettoriale del "pallino" */
    
private Shape figuraPallino;

    
/* Rappresentazione vettoriale della "croce" */
    
private Shape figuraCroce;

    
/* Distanza tra il bordo della cella e le figure dei simboli */
    
private int margineInterno 4;

    
/* Altezza di una cella */
    
private int larghezzaCella 10;

    
/* Larghezza di una cella */
    
private int altezzaCella 10;

    
/* Griglia di celle */
    
private Grid griglia;

    
/** Inizializza un DrawAndClick che da una veste grafica alla griglia in
    argomento. */
    
public DrawAndClick(Grid griglia) {
        
this.griglia griglia;
        
setDimensioniCella(larghezzaCellaaltezzaCella);

        
/* Queste linee connettono a questo JComponent (DrawAndClick extends JComponent...)
        un ascoltatore di eventi prodotti dal mouse. Il meccanismo di gestione degli eventi
        di AWT/Swing farà in modo che quando l'utente prema uno dei pulsanti del mouse
        nell'area del desktop occupata da questo JComponent sia invocato il metodo "mouseClicked"
        del MouseListener qui associato */
        
addMouseListener(new MouseAdapter() {
            public 
void mouseClicked(MouseEvent e) {
                
gestisciClickDelMouse(e.getPoint());
            }
        });
    }

    
/** Invocato autonomamente quando la radice dell'albero di proiezione
    a cui questo componente appartiene diviene visualizzabile. A noi interessa
    perchè a partire da quel momento getGraphicsConfiguration(), usato per
    inizializzare il buffer backBuffer, restituisce un valore diverso da null */
    
public void addNotify() {
        
super.addNotify();
        
initializeBackBuffer();
    }

    
/** Invocato in costruzione */
    
public void setDimensioniCella(int larghezzaint altezza) {
        
/* GeneralPath è un percorso vettoriale */
        
GeneralPath croce = new GeneralPath();
        
croce.moveTo(00);
        
croce.lineTo(larghezza margineInternoaltezza margineInterno);
        
croce.moveTo(larghezza margineInterno0);
        
croce.lineTo(0altezza margineInterno);
        
figuraCroce croce;

        
/* Un ellisse per il pallino */
        
Ellipse2D.Float pallino = new Ellipse2D.Float(
            
00larghezza margineInternoaltezza margineInterno);
        
figuraPallino pallino;

        
larghezzaCella larghezza;
        
altezzaCella altezza;

        
/* Attribuisce a questo componente Swing una dimensione di cui un
        LayoutManager può tenere conto */
        
Dimension dimensioniPannello = new Dimension(
            
larghezzaCella griglia.getNumeroDiColonne() + 1,
            
altezzaCella griglia.getNumeroDiRighe() + 1);
        
setMinimumSize(dimensioniPannello);
        
setMaximumSize(dimensioniPannello);
        
setPreferredSize(dimensioniPannello);
    }

    
/** Ridefinisce l'omonimo metodo di JComponent che disegna questo
    componente Swing */
    
protected void paintComponent(Graphics graphics) {
        
super.paintComponent(graphics);
        
graphics.drawImage(backBuffer00null);
    }

    
/* Questo metodo è invocato autonomamente quando si clicca il
    mouse su questo componente. */
    
private void gestisciClickDelMouse(Point puntoDiPressione) {
        
/* Dal punto sullo schermo passa alla cella */
        
int indiceRiga puntoDiPressione.altezzaCella;
        
int indiceColonna puntoDiPressione.larghezzaCella;
        if(
indiceRiga griglia.getNumeroDiRighe() && indiceColonna griglia.getNumeroDiColonne()) {
            
cambiaSimboloCella(indiceRigaindiceColonna);
        }
    }

    
/** Cambia il simbolo della cella di indice numeroDiRiga, numeroDiColonna */
    
private void cambiaSimboloCella(int indiceRigaint indiceColonna) {
        
Simbolo simboloAttuale griglia.getSimboloCella(indiceRigaindiceColonna);
        
Simbolo nuovoSimbolo;
        if(
simboloAttuale == Simbolo.VUOTO) {
            
nuovoSimbolo Simbolo.PALLINO;
        } else if(
simboloAttuale == Simbolo.PALLINO) {
            
nuovoSimbolo Simbolo.CROCE;
        } else if(
simboloAttuale == Simbolo.CROCE) {
            
nuovoSimbolo Simbolo.VUOTO;
        } else {
            throw new 
RuntimeException("Hai dimenticato qualcosa? :D");
        }
        
griglia.setSimboloCella(nuovoSimboloindiceRigaindiceColonna);
        
aggiornaProiezioneCella(indiceRigaindiceColonnabackBufferGraphics);
        
repaint();
    }

    
/* Disegna lo sfondo del contenitore */
    
private void disegnaSfondo(Graphics2D pipeline) {
        
pipeline.setPaint(Color.WHITE);
        
pipeline.fillRect(00backBuffer.getWidth(), backBuffer.getHeight());
    }

    
/* Disegna l'intera griglia */
    
private void disegnaGriglia(Graphics2D pipeline) {
        
Point coordinateCella = new Point();
        
pipeline.setPaint(Color.BLACK);
        for(
int indiceCella 0indiceCella griglia.getNumeroDiCelle(); indiceCella++) {
            
/* Tramite la griglia, ottiene la posizione (indiceDiRiga, indiceDiColonna)
            della cella di indice indiceCella nella matrice della griglia. Questa posizione
            è immagazzinata nel punto coordinateCella */
            
griglia.superScript(indiceCellacoordinateCella);

            
/* Disegna un rettangolo che rappresenta il bordo della cella */
            
int posizioneXCella coordinateCella.larghezzaCella;
            
int posizioneYCella coordinateCella.altezzaCella;
            
pipeline.drawRect(posizioneXCellaposizioneYCellalarghezzaCellaaltezzaCella);

            
/* Disegna il simbolo contenuto nella cella*/
            
int spostamentoXFigura posizioneXCella margineInterno 2;
            
int spostamentoYFigura posizioneYCella margineInterno 2;
            
Simbolo simboloCella griglia.getSimboloCella(indiceCella);
            
pipeline.translate(spostamentoXFiguraspostamentoYFigura);
            if(
simboloCella == Simbolo.PALLINO) {
                
pipeline.fill(figuraPallino);
            } else if(
simboloCella == Simbolo.CROCE) {
                
pipeline.draw(figuraCroce);
            }
            
pipeline.translate(-spostamentoXFigura, -spostamentoYFigura);
        }
    }

    
/* Aggiorna una cella della griglia */
    
private void aggiornaProiezioneCella(int indiceRigaint indiceColonnaGraphics2D pipeline) {
        
int posizioneXCella indiceColonna larghezzaCella;
        
int posizioneYCella indiceRiga altezzaCella;
        
pipeline.setPaint(getBackground());
        
pipeline.fillRect(posizioneXCellaposizioneYCellalarghezzaCellaaltezzaCella);
        
pipeline.setPaint(Color.BLACK);
        
pipeline.drawRect(posizioneXCellaposizioneYCellalarghezzaCellaaltezzaCella);
        
Simbolo simboloCella griglia.getSimboloCella(indiceRigaindiceColonna);
        
int spostamentoXFigura posizioneXCella margineInterno 2;
        
int spostamentoYFigura posizioneYCella margineInterno 2;
        
pipeline.translate(spostamentoXFiguraspostamentoYFigura);
        if(
simboloCella == Simbolo.PALLINO) {
            
pipeline.fill(figuraPallino);
        } else if(
simboloCella == Simbolo.CROCE) {
            
pipeline.draw(figuraCroce);
        }
        
pipeline.translate(-spostamentoXFigura, -spostamentoYFigura);
    }

    
/* Inizializza il buffer su cui è disegnata la rappresentazione della griglia */
    
private void initializeBackBuffer() {
        
backBuffer getGraphicsConfiguration().createCompatibleImage(
            
griglia.getNumeroDiRighe() * altezzaCella 1,
            
griglia.getNumeroDiColonne() * larghezzaCella 1,
            
Transparency.OPAQUE);
        
backBufferGraphics backBuffer.createGraphics();
        
backBufferGraphics.setRenderingHint(
            
RenderingHints.KEY_ANTIALIASING,
            
RenderingHints.VALUE_ANTIALIAS_ON);
        
disegnaSfondo(backBufferGraphics);
        
disegnaGriglia(backBufferGraphics);
    }

Resta il punto d'entrata dell'applicazione autonoma. Avrai sicuramente già visto una classe "Main", questa è una classe Main il cui metodo main apre sullo schermo una finestra. Questa finestra contiene un DrawAndClick a cui è affidato un Grid.

Codice PHP:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

/** Classe principale dell'applicazione autonoma */
public class Main {

    
/** Punto d'entrata del programma */
    
public static void main(String[] args) {
        
/* Avvio dell'interfaccia grafica: */
        
SwingUtilities.invokeLater(new Runnable() {
            public 
void run() {
                new 
Main().apriFinestra();
            }
        });
    }

    private 
WindowListener ascoltatoreEventiFinestra = new WindowAdapter() {
        
/** Questo metodo è invocato autonomamente quando l'utente cerca di
        chiudere la finestra */
        
public void windowClosing(WindowEvent e) {
            
chiudiProgramma();
        }
    };

    
/* La griglia */
    
private Grid griglia = new Grid(3030);

    
/* Il pannello che proietta la griglia */
    
private DrawAndClick contenitoreGriglia = new DrawAndClick(griglia);

    
/* La finestra principale del programma */
    
private JFrame finestra = new JFrame("DrawAndClick");

    
/* Inizializza i componenti dell'interfaccia */
    
private Main() {
        
/* Assegna un colore di sfondo al contenitore della griglia */
        
contenitoreGriglia.setBackground(Color.WHITE);
        
contenitoreGriglia.setOpaque(true);

        
/* Da una dimensione alle cella del contenitore della griglia */
        
contenitoreGriglia.setDimensioniCella(2020);

        
/* Collega l'ascoltatore di eventi prodotti da una finestra alla
        finestra */
        
finestra.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        
finestra.addWindowListener(ascoltatoreEventiFinestra);

        
/* Inserisce il pannello che proietta la griglia nella finestra */
        
finestra.add(contenitoreGrigliaBorderLayout.CENTER);
    }

    
/* Proietta la finestra principale sul desktop */
    
private void apriFinestra() {
        
finestra.pack();
        
finestra.setVisible(true);
    }

    
/* Da ascoltatoreFinestra.windowClosing */
    
private void chiudiProgramma() {
        
finestra.dispose();
    }

Nota che il contenuto del metodo main, quello strano SwingUtilities.eccetera, è necessario, in quella forma o in forme equivalenti, per questioni di programmazione concorrente.

Per domande, dubbi, curiosità siamo qui.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2007, 18:35   #18
spillo491
Member
 
Iscritto dal: Dec 2006
Messaggi: 201
Sei trooppo gentile

Ho provato a compilare e funziona !!!
Adesso me lo guardo con calma e cerco di capire il tutto

Grazie ancora

PS: Ma tu sei il pgi del forum MokaByte ?
spillo491 è offline   Rispondi citando il messaggio o parte di esso
Old 17-04-2007, 15:08   #19
spillo491
Member
 
Iscritto dal: Dec 2006
Messaggi: 201
Codice PHP:
public void setDimensioniCella(int larghezzaint altezza) { 
        
/* GeneralPath è un percorso vettoriale */ 
        
GeneralPath croce = new GeneralPath(); 
        
croce.moveTo(00); 
        
croce.lineTo(larghezza margineInternoaltezza margineInterno); 
        
croce.moveTo(larghezza margineInterno0); 
        
croce.lineTo(0altezza margineInterno); 
        
figuraCroce croce
L'istruzione "croce.moveTo(0, 0);" porta il cursore nell'angolo in alto a sx della cella ? Da quanto ho capito queste istruzioni dovrebbero disegnare la croce ma non mi tornano le coordinate?
spillo491 è offline   Rispondi citando il messaggio o parte di esso
Old 17-04-2007, 15:29   #20
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
No, se intendo correttamente.

GeneralPath è la definizione di un poligono da settimana enigmistica: unisci tutti i puntini e vedi cosa salta fuori.

E' uno java.awt.geom.Shape, cioè una figura geometrica 2D. Un oggetto Shape può essere rifilato al metodo draw o fill di un Graphics2D e il risultato è che la figura geometrica viene riprodotta alla foce della pipeline di rendering. Sullo schermo o in memoria, dipende. Comunque sia, la creazione di un oggetto di tipo Shape (GeneralPath ad esempio) non comporta anche il disegno di quella figura.

Le linee di codice che quoti creano e mettono da parte, per un uso futuro, una crocetta. La crocetta è fatta di due linee separate e incrociate. Le diagonali di un quadrato.

Ci sono diversi tipi di Shape nel package java.awt.geom. Non c'è la crocetta. Per crearla, quindi, uso GeneralPath. La linea:

croce.moveTo(0, 0);

usa il metodo moveTo per dire al GeneralPath: "qui inizia un segmento separato da tutti gli altri".

La linea:

croce.lineTo(larghezza - margineInterno, altezza - margineInterno);

usa il metodo lineTo per dire al GeneralPath: "immagazzina un segmento retto che parte dal punto precedente, quello del moveTo nel nostro caso, e arriva fino a (larghezza - margineIntero, altezza - margineInterno)". Una delle due diagonali di un rettangolo, quella che inizia dall'estremo in alto a sinistra e finisce in basso a destra.

La linea seguente:

croce.moveTo(larghezza - margineInterno, 0);

dice al GeneralPath di immagazzinare quel punto come l'inizio di un segmento non connesso. E' il primo punto della seconda diagonale: in alto a destra.

L'ultima linea:

croce.lineTo(0, altezza - margineInterno);

dice al GeneralPath di immagazzinare una linea che va dal punto precedente, quello del moveTo, al punto (0, altezza - margineInterno). E' il secondo punto della seconda diagonale: in basso a sinistra.

Nel sistema di coordinate della pipeline di rendering Java2D (accessibile tramite un oggetto Graphics2D), l'origine degli assi è "in alto a sinistra". X cresce "verso destra", Y cresce "verso il basso".

Ripeto, quello istruzioni creano una croce ma non la disegnano. Il disegno della croce avviene quando trovi un "pipeline.draw(figuraCroce)". Noterai come quelle istruzioni siano precedute da un "pipeline.translate". Questo perchè, come si nota nella costruzione del GeneralPath, la crocetta è costruita come una linea che parte dal punto (0,0) e va fino al punto, in ipotesi, (10, 10) più una linea che parte dal punto (10, 0) e va fino al punto (0, 10). Un semplice pipeline.draw(figuraCroce) disegnerebbe questa croce come risulta dai suoi punti: sempre in alto a sinistra dello schermo. Spostando il sistema di coordinate con translate, prima del disegno, siamo in grado di far apparire una stessa figura in punti diversi dello schermo senza cambiare le coordinate dei suoi punti (ma cambiando l'origine degli assi del sistema di coordinate a cui appartiene al figura).
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Sony Xperia 1 VII: lo smartphone per gli appassionati di fotografia Recensione Sony Xperia 1 VII: lo smartphone per ...
Attenti a Poco F7: può essere il best buy del 2025. Recensione Attenti a Poco F7: può essere il best buy...
Recensione Samsung Galaxy Z Fold7: un grande salto generazionale Recensione Samsung Galaxy Z Fold7: un grande sal...
The Edge of Fate è Destiny 2.5. E questo è un problema The Edge of Fate è Destiny 2.5. E questo ...
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello Ryzen Threadripper 9980X e 9970X alla prova: AMD...
Oltre 1.700 km con una ricarica: l'assur...
Maxi annuncio dalla Casa Bianca: Apple p...
Microonde con grill, super venduto e app...
Pubblicazioni scientifiche false in aume...
Ecco le 100 startup che prenderanno part...
Pandora colpita da un attacco informatic...
Cooler Master MasterFrame 360 Panorama S...
Motorola e Swarovski lanciano The Brilli...
Wikipedia dichiara guerra all'IA spregiu...
Dai social ai farmaci dimagranti: il nuo...
Addio spam su WhatsApp? Ecco le nuove di...
Su Windows 11 25H2 cambierà (in p...
Per la prima volta un portatile gaming c...
Meta condannata per aver violato la priv...
Hai almeno 16GB di RAM? Ecco il nuovo mo...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 18:03.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v