JAVA – SWING – JFRAME

La classe JFrame è una sottoclasse di java.awt.Frame che, a sua volta, è una sottoclasse di java.awt.Window. Per questi motivi JFrame è uno dei componenti GUI di Swing che non è considerato un componente leggero: a differenza della maggior parte dei componenti Swing, JFrame non è scritto esclusivamente in Java, ma va considerato una sorta di “wrapper” sulle finestra native del sistema.

import javax.swing.JFrame;
public class EmptyFrame {
public static void main(String[] args) {
JFrame jFrame = new JFrame(“Empty window”);
// la finestra è creata ma non ancora visibile!
}
}

Quindi un’applicazione dotata di GUI, una volta lanciata, rimane in attesa dell’input utente e termina solo in base ad un determinato evento (es. click su un pulsante close,chiusura della finestra…).

Per default una finestra viene nascosta: questo significa rimossa semplicemente dallo schermo.
Possiamo controllare questo tipo di azione attraverso il metodo setDefaultCloseOperation di JFrame:

import javax.swing.JFrame;
public class EmptyFrame {
public static void main(String[] args) {
JFrame jFrame = new JFrame(“Empty window”);
// definiamo il comportamento per la chiusura
jFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
}

L’interfaccia WindowConstants (una delle interfacce implementate da JFrame) del package javax.swing definisce 3 costanti da utilizzare con questo metodo: DISPOSE_ON_CLOSEDO_NOTHING_ON_CLOSEHIDE_ON_CLOSE (default).

Per default una finestra non viene visualizzata sullo shermo fino a quando non viene chiamato il suo metodo show(), oppure, come fatto precedentemente, chiamando il metodo setVisible(true).

import javax.swing.JFrame;
public class EmptyFrame {
public static void main(String[] args) {
JFrame jFrame = new JFrame(“Finestra Vuota”);
jFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
jFrame.setSize(400,400);
jFrame.setVisible(true);
}
}

e si visualizzerà una finestra vuota.

Pubblicato in Senza categoria | Lascia un commento

Java – swing

A partire dalla versione 1.0 dell’ambiente di sviluppo java venne fornita la libreria AWT (Abstract Window Toolkit). Si tratta di una libreria per creare interfacce grafiche in Java utilizzando componenti dipendenti dal sistema operativo.

Swing è la libreria grafica di seconda generazione di Java, è stata introdotta dalla versione 1.2 in poi, allo scopo di disporre di un toolkit di sviluppo di GUI portabile su vari sistemi operativi, e fa parte di un gruppo di librerie note come Java Fountation Classes (JFC). A differenza di AWTSwing non effettua chiamate native al sistema operativo per la costruzione dei componenti, ma li ricostruisce da zero.

Caratteristiche:

  •  differenza di AWTSwing definisce qualsiasi tipo di componente di qualsiasi sistema operativo e addirittura ne inventa di nuovi
  • I pulsanti e le label di Swing possono visualizzare anche immagini oltre che testo
  • Grazie al supporto del cambio del look & feelè possibile vedere GUI con stili di diversi sistemi operativi su uno stesso sistema operativo. (Possiamo ad esempio voler dare lo “stile mac” anche ad una applicazione eseguita su windows)
  • E’ facile anche cambiare i bordi dei componenti cosi come gestire i tooltip

componenti Swing possono essere trovati nel package javax.swing. I nomi delle classi iniziano tutti per convenzione con la lettera J, la parte rimanente del nome della classe rappresenta il nome del componente Swing: JButtonJLabelJTextField

Un componente Swing ha lo stesso aspetto su tutte le piattaforme, visto che il suo codice è scritto in Java: si parla a tal proposito di componenti lightweight (“leggeri”), poiché non richiedono una allocazione di risorse da parte del sistema operativo al di fuori della JVM.

Pubblicato in Senza categoria | Lascia un commento

PHP – Classi – public – protected – private

Le classi possono condividere le proprie funzionalità (costanti, attributi e metodi) con le classi eredi.

Public

L’attributo o il metodo dichiarato come public è accessibile/ modificabile e richiamabile dall’interno della classe stessa, dall’esterno della classe e dall’interno delle classi che ereditano.

Quindi ho una classe che eredita gli attributi e i metodi della classe padre. Da notare comunque che quando istanzio la variabile Rebecca essa prende il valore di a iniziale della classe e non quello modificato precedentemente.

Protected

L’indicatore di visibilità protected è più restrittivo rispetto al precedente: gli attributi ed i metodi non sono accessibili e modificabili dall’esterno della classe ma lo sono dalle classi che ereditano:

questa è la definizione.

questo codice fornisce questo errore:

questo invece è corretto.

Riassumendo:

con l’operatore this sono acceduto all’attributo (proprietà) presente nella classe Natante .

Attenzione che per accedere all’attributo della classe Natante non devo mettere il dollaro.

Private

L’indicatore di visibilità private è il più restrittivo dei tre. Le proprietà dichiarate come private sono accessibili/modificabili solo dall’interno della classe che li dichiara, cosi come i metodi privati sono richiamabili solo al suo interno:

per accedere all’attributo a ho creato un metodo pubblico che accede ad a ed al metodo sayHello. Solo in questa maniera posso accedervi dalla sottoclasse.

Pubblicato in Senza categoria | Lascia un commento

PHP – Classi – Attributo statico

A differenza dei normali attributi, che appartengono alle determinate istanze della classe e vengono richiamate con l’operatore di deferenziamento (“->”) e che rappresentano dunque dei dati istanza,gli attributi statici non appartengono a nessuna istanza in particolare, ma sono di fatto componenti statici di proprietà della classe stessa.


Le proprietà statiche si dichiarano attraverso la parola chiave static, preceduta o seguita opzionalmente dall’indicatore di visibilità (che analizzeremo nelle successive lezioni) e dal namespace desiderato. Se non si specifica nessun indicatore di visibilità, verrà utilizzato il valore public .


Le proprietà statiche dunque, essendo dati statici, non possono essere richiamate attraverso le istanze della classe .

quindi gli attributi statici sono comuni a tutte le istanze!

Metodi statici

Anche i metodi statici non appartengono ad una particolare istanza ma sono comuni a tutte le istanze.

Si accede ad un metodo statico con il nome della classe seguito dai due punti.

Pubblicato in Senza categoria | Lascia un commento

PHP – Classi – Costruttore e distruttore

Grazie al metodo costruttore, è possibile decidere quale comportamento deve assumere l’oggetto quando viene creato.

Il metodo costruttore infatti, viene richiamato nella fase di creazione dell’oggetto e si dichiara tramite la funzione __construct .

In questo caso il metodo costruttore permette quando istanzio la classe di utilizzare e valorizzare gli attributi che utilizza la classe.

Ma se esiste un metodo che viene richiamato quando si creano gli oggetti, è altrettanto vero che ne esiste un altro che viene richiamato quando si distruggono: quest’ultimo prende il nome di distruttore.

Se il metodo __construct viene richiamato quando si creano gli oggetti, il rispettivo metodo __destruct viene richiamato nella fase di distruzione degli stessi.


A differenza della fase di creazione degli oggetti, che è assolutamente esplicita, la fase di distruzione non lo è altrettanto. PHP infatti, chiama il metodo distruttore solo quando è davvero sicuro che tutti i riferimenti all’oggetto siano stati cancellati oppure quando l’oggetto è distrutto/cancellato manualmente (per cancellare un oggetto, o in via generale una variabile, è possibile richiamare la funzione unset oppure settare esplicitamente l’oggetto ad un nuovo valore)

Occorre sapere che tutti gli oggetti, come del resto tutte le variabili, vengono distrutti automaticamente da PHP al termine dello script.

Significa che se anche non uso unset comunque al termine dello script la zona in memoria viene eliminata.

E’ interessante quindi eseguire il codice precedente senza unset e si noterà che stamperà ugualmente che il metodo distruttore è stato chiamato.

Pubblicato in Senza categoria | Lascia un commento

PHP – Cancellazione file

Pubblicato in Senza categoria | Lascia un commento

PHP – Classi in PHP – introduzione

Richiamo sulle classi in PHP

Ho creato la funzionalità della mia classe, ci occorre un modo per richiamarle: questo diventa possibile tramite le istanze della classe (o oggetti). Per dichiarare un’istanza si usa l’operatore new seguito dal nome della classe ed opzionalmente da una lista di parametri richiesti dalla funzione costruttore.

In questo caso ho modificato il calore della variabile a assegnandogli il valore 100 e lo mostrato a video.

Se si volesse richiamare un attributo all’interno del metodo si usa l’operatore this.

Si noti che ho istanziato myclass2 che imposta a 20 l’attributo nel metodo e che myclass_1 utilizza.

Pubblicato in Senza categoria | Lascia un commento

PHP – CMS – Creazione tabella per la gestione dei dati

Lo scopo di questa tabella è quello di descrivere tutte le tabelle di dati e memorizzare le informazioni necessarie per la costruzione delle interfacce, i form, per la gestione dei dati.

Vado ad analizzare i campi creati:

  • il secondo campo tabella (VARCHAR(20)) dove memorizzeremo il nome della tabella di appartenenza del campo, nel nostro caso i valori saranno “news” o “autori”
  • Il terzo campo sarà il nome del campo (VARCHAR(20)), quindi per la tabella “news” avremo idtitolotesto e così via
  • Quarto campo label (VARCHAR(50)) per definire l’etichetta del campo nel form, dato che il nome del campo non può essere utilizzato per convenzione. Per esempio nel nostro caso potremmo avere “data_pubblicazione” e label “Data pubblicazione”.
  • Il quinto campo sarà un ENUM con valori ‘0’ o ‘1’: lo chiameremo chiave e servirà per definire la chiave primaria.
  • Il sesto campo, tipo_input, sarà un ENUM contenente tutte le possibili opzioni di input texthiddenpasswordsearchemailnumberdatecheckboxcheckboxlistradiolistselect textarea). Potremmo avere text per il titolo della news e una textarea per il testo, un hidden per l’id ecc.
  • Il campo successivo sarà un ENUM e servirà per definire se un campo è obbligatorio o meno ed effettuare i relativi controlli server-side, ovviamente questa opzione può essere sfruttata anche per creare controlli client-side. Simile la funzione del campo controllo che sarà sempre funzionale ai controlli server-side e potremo scegliere fra le opzioni string o int.
  • Abbiamo ora un terzetto di campi che serviranno per la creazione delle SELECT e quindi per la gestione delle relazioni uno a molti: se il controllo sarà quindi una SELECT dovremo indicare da quale tabella estrarre i dati, quale campo utilizzare per il valore della option HTML e quale nel testo visibile. Si tratta quindi di tre VARCHARorigine_tabellaorigine_idorigine_testo.
  • I successivi tre campi hanno uno scopo simile ma questa volta declinato sulle tabelle di relazione molti a molti (il tipo di campo normalmente associato sarà una checkboxlist):rel_tabellarel_id1rel_id2, tutti VARCHAR.
  • L’ultimo campo, ordine, e sarà un INT, o un decimal(10,3), e servirà per decidere l’ordine dei campi nei form di inserimento e modifica.

Adeso devo popolare la tabella:

Ora nella tabella struttura ci sono tutte le informazioni e le meta-informazioni per gestire le tabelle “news” e “autori”: eseguendo una SELECT saremo in grado di costruire i form e le liste per la gestione dei dati.

Pubblicato in Senza categoria | Lascia un commento

PHP – CMS – Creazione ambiente InnoDB vs MyISAM e Collate

Creo il database che chiamerò GIORNALE.

Ecco il codice sorgente per la creazione del database

Creo due tabelle una delle news ed una degli autori.

Quindi ogni autore può creare più news.

Creo la tabella delle news:

utf8_unicode_ci significa usare le regole dell’Occial Unicode che è utilizzato nella maggior parte delle lingue. ci significa case insensitive.

Affermare che ENGINE=MyISAM significa creare una struttura del database diversa da quella di default che si chiama InnoDB.

MyISAM

  1. Ogni tabella può raggiungere al massimo 256TB.
  2. si creano su disco tre file: .frm che contiene il formato della tabella, .myd che contiene i dati, .myi che contiene gli indici
  3. il lock avviene a livello di tabella e non di record e va bene per tabelle che hanno poca movimentazione

InnoDB

  1. Storage di default
  2. il lock avviene a livello di record
  3. supporta il mondo transazionale ossia solo con l’operazione di commit avviene l’effettiva scrittura sul database
  4. creazione di foreign keys per mantenere un database relazionale
  5. permette di eseguire query su righe che, contemporaneamente, sono in fase di aggiornamento, leggendo i dati così come apparivano prima delle modifiche in corso
  6. ogni tabella può raggiungere i 64TB

COLLATE

Serve per dire al DBMS come scrivere i caratteri che sono memorizzati nella relativa colonna e quanto spazio essa deve occupare.

  1. utf8mb4 al massimo quattro byte per carattere
  2. utf8mb3 al massimo 3 byte per carattere
  3. utf8 è un alias utf8mb3

Vado a adesso a definire al seconda tabella, quella degli autori

Infine creo la chiave esterna nella tabella della news:

Da notare la sintassi per la creazione della chiave esterna, come buona pratica quindi prima si creano le tabelle e successivamente le chiavi esterne.

Pubblicato in Senza categoria | Lascia un commento

PHP – CMS – PDO – Introduzione


George Grie

Si chiamano Content Management System le applicazioni di gestione dei contenuti dei siti che consentono di inserire, modificare e rendere visibili articoli, banner, immagini e link senza ricorrere a sistemi di sviluppo.

Un Content Management System è un’applicazione che consente di variare i contenuti di un sito senza intervenire sulle pagine o sul database da cui sono lette le informazioni.

Il suo vantaggio è che una volta creata la struttura che dinamicamente produce le pagine, i contenuti possono essere inseriti e variati senza conoscenze tecniche di sviluppo.

Tecnicamente si tratta di una applicazione, spesso usabile mediante il browser, che consente con un front-end di semplice uso l’inserimento e la gestione di articoli, schede, elenchi, link e banner. Tali informazioni sono poste nel database dal quale poi il motore dinamico del sito le estrae per produrre le pagine che saranno visualizzate al visitatore. Chi inserisce i contenuti, in sostanza, non deve avere conoscenze tecniche. Deve saper scrivere e quasi niente altro.

Pubblicato in Senza categoria | Lascia un commento