netbeans - esempi · sappia costruire un progetto del tipo java->java desktop application,...

53
NetBeans - Esempi Giovanni Torrero

Upload: others

Post on 17-Mar-2020

12 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

NetBeans - Esempi

Giovanni Torrero

Page 3: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

Indice

Capitolo 1. Applicazioni 51.1. File Chooser 51.2. Grafica 2D 24

Indice analitico 49

Bibliografia 51

Bibliografia 53

3

Page 4: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE
Page 5: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

CAPITOLO 1

Applicazioni

1.1. File Chooser

Come primo esempio costruiremo una semplice applicazione checonsente di aprire un file contenente una stringa la scrive in un com-ponente tipo jText cioè un campo di testo. Diamo per scontato che sisappia costruire un progetto del tipo Java->Java Desktop Application ,inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE di NetBeans e che quindi sappia usare i vari am-mennicoli che in esso compaiono, chi non ha questa dimestichezzasmanetti un po’ e veda di acquisirla.

Chiamiamo la nostra applicazione SceltaFile , costruiamo il relati-vo progetto e successivamente apriamo il file SceltaFileView.java ,passiamo alla vista Design e dalla palette trasciniamo una tool bar,che si trova negli Swing Containers , e poniamola nella parte al-ta del form. Inseriamo nella tool bar due botton , togliamo ad en-trambi il testo e inseriamo due icone che abbiamo precedentementepreparato, in formato 16x16 ed estensione png , Infine inseriamo un i file contenenti

le icone vanno

memorizzati nella

directory del progetto

secondo questo

percorso ..\SceltaFile\

src\sceltafile\resources

campo di testo e il form dell’applicazione dovrebbe apparire comequello riportato nella figura sottostante.

5

Page 6: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

6 1. APPLICAZIONI

FIGURA 1.1.1. Form principale

Aggiungiamo due voci al menu File scegliendo la Palette poi Swing Menused infine Menu Item , trasciniamo sul menu File e posizioniamo comeindicato nella figura sottostante

Page 7: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

1.1. FILE CHOOSER 7

FIGURA 1.1.2. Menu File

Scegliendo la voce del menu che ci interessa e facendo click con iltasto destro otteniamo un pop-menu al fondo del quale c’è la voceProperties selezionandola apriamo la relativa finestra nella qualemodifichiamo la voce toolTipText , la voce text

Page 8: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

8 1. APPLICAZIONI

FIGURA 1.1.3. La finestra Properties

Mentre la maggior parte dei cambiamenti proposti sono molto intu-itivi action è leggermente più complesso, facendo click sul tastinocon i tre puntini relativo alla riga in cui si trova action compare laseguente finestra di dialogoinizialmente nella riga

di action non compare

Save ma null

Page 9: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

1.1. FILE CHOOSER 9

FIGURA 1.1.4. Finestra di dialogo action prima delle modifiche

in questa finestra facciamo la scelta indicata nella figura poi comple-tiamo i rimanenti campi come indicato nella figura sottostante:

Page 10: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

10 1. APPLICAZIONI

actionFIGURA 1.1.5. Finestra di dialogo relativa a action

Una volta creata action può essere usata sia per la relativa vocedel menu che per il relativo tasto della tool bar, quindi per ogni tastodella tool bar e per ogni voce del menu bisogna ripetere la proceduradi cui sopra.

Terminato quanto detto sopra, nel file SceltaFileView.java passiamoalla modalità Source e ci accorgiamo che sono stati costruiti glischeletri di due nuovi metodi, con la notazione @Action , il meto-do public void Salva() e il metodo public void ApriFile() , questi due

Page 11: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

1.1. FILE CHOOSER 11

metodi sono quelli che gestiranno il click su una delle voci del menuche abbiamo aggiunto oppure su uno dei tasti della tool bar.

Quando premiamo un pulsante della tool bar oppure una delle vociaggiunte nel menu File vogliamo che appaia una finestra di dialogoche ci permetta di scegliere la directory dalla quale leggere il fileoppure nella quale memorizzarlo. Per ottenere quanto detto bisognacostruire una nuova classe che implementi una finestra di dialogo diquel tipo, anzi bisogna costruire due classi: una per l’apertura del filee una per la scrittura. Cominciamo a costruire quella per la scrittura,

La finestra di dialogo che permette la scelta del file da gestire è quel-la che siamo abituati a vedere nei programmi di Window e di altri sis-temi operativi e in Java è implementata nella classe JFileChooser ,l’uso di questo componente è ben spiegato al seguente indirizzo:

http://java.sun.com/docs/books/tutorial/uiswing/components/filechooser.html .

Nella palette esiste un componente di tipo JFileChooser , trasci-nandolo in un form otteniamo un componente che ci permette discegliere un file dal disco fisso ma poi non sono riuscito a ottenereil nome del file e nemmeno a gestire l’azione dei pulsanti che com-paiono nel componente e nè su Internet e nè sui testi in mio pos-sesso sono riuscito a trovare un indizio che mi illuminasse sull’usodi questo componente, sembra proprio che l’unico modo di risolvereil problema sia quello indicato nell’url precedente. Nel tutorial primaindicato si afferma che bastano le seguenti due righe di codice perfar apparire un’istanza di JFileChooser :

1 / / Create a f i l e chooser f i n a l JFi leChooser2 f c = new JFi leChooser ( ) ;3 . . .4 / / In response to a but ton c l i c k :5 i n t r e tu rnVa l = f c . showOpenDialog ( aComponent ) ;

La seconda linea costruisce un’istanza della classe JFileChoosermentre la quarta linea fa apparire l’istanza costruita e restituisce unnumero intero se questo intero coincide con APPROVE_OPTIONsignifica che è stato premuto il tasto Salva (oppure Apri). AP-PROVE_OPTION è una costante intera definita nella classe JFileChooser

Page 12: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

12 1. APPLICAZIONI

, in questa classe sono definite altre costanti riportate nella sot-tostante tabella

FIGURA 1.1.6. Costanti della classe JFileChooser

Se alle righe di codice di cui sopra si aggiunge la seguente:

S t r i n g nome_f i le = f c . ge tSe lec tedF i l e ( ) . getPath ( ) ;

abbiamo in returnVal il codice del tasto premuto: APPROVE_OPTIONse abbiamo premuto Salva (oppure Apri) , CANCEL_OPTION se ab-biamo premuto Annulla e in nome_file il nome, completo del suopercorso, del file selezionato.

Page 13: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

1.1. FILE CHOOSER 13

La pressione del tasto Annulla non è da gestire perché la sua ges-tione è automatica e provoca la chiusura della finestra di dialogosenza salvare o aprire nulla, rimane da gestire solo la pressione deltasto Salva (o Apri).

Page 14: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

14 1. APPLICAZIONI

La pressione del tasto Salva viene gestita nella seguente procedu-ra.

1 @Action2 public void Salva ( ) {3 S t r i n g tes to = j T e x t F i e l d 1 . getText ( ) ;4 S t r i n g ch ;5 JFrame mainFrame = Scel taF i leApp . g e t A p p l i c a t i o n ( ) .

getMainFrame ( ) ;67 / / Le due r ighe seguent i svolgono i l ruo lo d e l l e8 / / i s t r u z i o n i precedentemente discusse9 JFi leChooser chooser = new JFi leChooser ( ) ;

10 i n t r e tu rnVa l = chooser . showSaveDialog ( mainFrame ) ;1112 i n t opzione = JOptionPane .YES_OPTION;13 S t r i n g messaggio = " I l f i l e s c e l t o e s i s t e già , vuo i

s o v r a s c r i v e r l o ? " ;14 S t r i n g english_message = " The chosen f i l e a l ready

ex i s t s , you want to ove rwr i t e i t ? " ;15 S t r i n g t i t o l o = " At tenz ione ! ! ! ! ! Warning ! ! ! ! ! " ;1617 / / I n i z i a qu i l a par te de l codice che ges t i sce18 / / l a pressione de l t as to Salva19 i f ( r e tu rnVa l == JFi leChooser .APPROVE_OPTION) {20 ch = chooser . ge tSe lec tedF i l e ( ) . getPath ( ) ;21 F i l e fch = new F i l e ( ch ) ;22 / / Ne l le due r ighe precedent i v iene prima l e t t o i l nome completo23 / / de l f i l e se lez iona to po i v iene c o s t r u i t o un ogget to d i t i p o24 / / f i l e c o l l e g a t o a quel nome .25 / / Ne l la r i g a seguente s i c o n t r o l l a che i l f i l e se lez iona to non26 / / s i a s ia presente n e l l a d i r e c t o r y se lez ionata , se questo f i l e27 / / e s i s t e g ià a l l o r a viene v i s u a l i z z a t a una f i n e s t r a che consente28 / / d i s c e g l i e r e se sov rasc r i ve re i l f i l e oppure r i t o r n a r e29 / / a s c e g l i e r e un nome nuovo30 i f ( fch . i s F i l e ( ) ) {31 opzione = JOptionPane . showConfirmDialog (

mainFrame , messaggio + " \ n " +english_message , t i t o l o , JOptionPane .YES_NO_OPTION) ;

32 }33 i f ( opzione == JOptionPane .YES_OPTION) {34 / / Se i l f i l e non e s i s t e ancora oppure vogliamo s o v r a s c r i v e r l o

procediamo

Page 15: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

1.1. FILE CHOOSER 15

Preoccupiamoci ora dell’azione della voce del menu Apri e del cor-rispondente tasto della toolbar. Il metodo che gestisce questo eventoè quello riportato nel listato sottostante:

1 @Action

2 public void ApriFile() {

3 String ch;

4 String lista = null;5 JFrame mainFrame = SceltaFileApp.getApplication().getMainFrame();

67 //Le successive due righe definiscono un oggetto di tipo JFileChooser

8 //e lo visualizza in modalita OpenDialog

9 JFileChooser chooser = new JFileChooser();

10 int returnVal = chooser.showOpenDialog(mainFrame);

1112 //Quando viene premuto il pulsante Apri viene eseguito questo blocco di

codice

13 if (returnVal == JFileChooser.APPROVE_OPTION) {

14 ch = chooser.getSelectedFile().getPath();

15 try {

16 //Viene aperto un flusso per la lettura di oggetti di tipo String

17 FileInputStream f = new FileInputStream(new File(ch));

18 ObjectInputStream s = new ObjectInputStream(f);

19 try {

20 //Viene letto un oggetto di tipo String e messo nella variabile lista

21 lista = (String) s.readObject();

22 } catch (ClassNotFoundException ex) {

23 Logger.getLogger(SceltaFileView.class.getName()).log(Level.SEVERE, null, ex);

24 JOptionPane.showMessageDialog(mainPanel, "I dati

caricati non sono compatibili con il programma");

25 }

26 s.close();

27 } catch (IOException e) {

28 JOptionPane.showMessageDialog(mainPanel, "Qualche cosa non

va nella scelta del file");

29 }

3031 if (lista instanceof String) {

32 //Se la variabile lista contiene effettivamente un oggetto di tipo String

33 //questi viene visualizzato nel campo di testo

34 jTextField1.setText(lista);

35 } else {

36 JOptionPane.showMessageDialog(mainPanel, "Il file caricato

non è compatibile con il programma");

37 }

38 }

3940 }

Page 16: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

16 1. APPLICAZIONI

Qui di seguito è riportato il listato completo della classe SceltaFileView, la maggior parte del codice è scritto automaticamente da Net-Beans, in pratica manualmente sono stati scritti solamente i duemetodi riportati nel listato di cui sopra.

/∗∗ Sce l taF i leV iew . java∗ /

package s c e l t a f i l e ;

import org . jdesk top . a p p l i c a t i o n . Act ion ;import org . jdesk top . a p p l i c a t i o n . ResourceMap ;import org . jdesk top . a p p l i c a t i o n . S ing leFrameAppl ica t ion ;import org . jdesk top . a p p l i c a t i o n . FrameView ;import org . jdesk top . a p p l i c a t i o n . TaskMonitor ;import java . awt . event . Act ionEvent ;import java . awt . event . Ac t i onL i s t ene r ;import java . i o . F i l e ;import java . i o . F i le InputSt ream ;import java . i o . Fi leOutputStream ;import java . i o . IOExcept ion ;import java . i o . Object InputStream ;import java . i o . ObjectOutputStream ;import java . u t i l . l ogg ing . Level ;import java . u t i l . l ogg ing . Logger ;import javax . swing . Timer ;import javax . swing . Icon ;import javax . swing . JDia log ;import javax . swing . JFi leChooser ;import javax . swing . JFrame ;import javax . swing . JOptionPane ;

/∗ ∗∗ The a p p l i c a t i o n ’ s main frame .∗ /

public class Sce l taF i leV iew extends FrameView {

public Sce l taF i leV iew ( Sing leFrameAppl ica t ion app ) {super ( app ) ;

in i tComponents ( ) ;

/ / s ta tus bar i n i t i a l i z a t i o n − message t imeout , i d l e iconand busy animation , e tc

ResourceMap resourceMap = getResourceMap ( ) ;

Page 17: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

1.1. FILE CHOOSER 17

i n t messageTimeout = resourceMap . ge t I n tege r ( " StatusBar .messageTimeout " ) ;

messageTimer = new Timer ( messageTimeout , newAc t i onL i s t ene r ( ) {public void act ionPerformed ( Act ionEvent e ) {

statusMessageLabel . se tText ( " " ) ;}

} ) ;messageTimer . setRepeats ( fa lse ) ;i n t busyAnimationRate = resourceMap . ge t I n tege r ( " StatusBar .

busyAnimationRate " ) ;for ( i n t i = 0 ; i < busyIcons . leng th ; i ++) {

busyIcons [ i ] = resourceMap . get Icon ( " StatusBar .busyIcons [ " + i + " ] " ) ;

}busyIconTimer = new Timer ( busyAnimationRate , new

Ac t i onL i s t ene r ( ) {public void act ionPerformed ( Act ionEvent e ) {

busyIconIndex = ( busyIconIndex + 1) % busyIcons .leng th ;

s ta tusAnimat ionLabel . se t Icon ( busyIcons [busyIconIndex ] ) ;

}} ) ;i d l e I c o n = resourceMap . get Icon ( " StatusBar . i d l e I c o n " ) ;s ta tusAnimat ionLabel . se t Icon ( i d l e I c o n ) ;progressBar . s e t V i s i b l e ( fa lse ) ;

/ / connect ing ac t i on tasks to s ta tus bar v ia TaskMonitorTaskMonitor taskMoni to r = new TaskMonitor ( g e t A p p l i c a t i o n ( )

. getContext ( ) ) ;taskMoni to r . addPropertyChangeListener (new java . beans .

PropertyChangeListener ( ) {public void propertyChange ( java . beans .

PropertyChangeEvent ev t ) {S t r i n g propertyName = evt . getPropertyName ( ) ;i f ( " s t a r t e d " . equals ( propertyName ) ) {

i f ( ! busyIconTimer . isRunning ( ) ) {s ta tusAnimat ionLabel . se t Icon ( busyIcons [ 0 ] )

;busyIconIndex = 0;busyIconTimer . s t a r t ( ) ;

}progressBar . s e t V i s i b l e ( true ) ;progressBar . se t Inde te rm ina te ( true ) ;

} else i f ( " done " . equals ( propertyName ) ) {busyIconTimer . stop ( ) ;s ta tusAnimat ionLabel . se t Icon ( i d l e I c o n ) ;progressBar . s e t V i s i b l e ( fa lse ) ;progressBar . setValue ( 0 ) ;

} else i f ( " message " . equals ( propertyName ) ) {

Page 18: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

18 1. APPLICAZIONI

S t r i n g t e x t = ( S t r i n g ) ( ev t . getNewValue ( ) ) ;statusMessageLabel . se tText ( ( t e x t == nul l ) ? " "

: t e x t ) ;messageTimer . r e s t a r t ( ) ;

} else i f ( " progress " . equals ( propertyName ) ) {i n t value = ( In tege r ) ( ev t . getNewValue ( ) ) ;progressBar . s e t V i s i b l e ( true ) ;progressBar . se t Inde te rm ina te ( fa lse ) ;progressBar . setValue ( value ) ;

}}

} ) ;}

@Actionpublic void showAboutBox ( ) {

i f ( aboutBox == nul l ) {JFrame mainFrame = Scel taF i leApp . g e t A p p l i c a t i o n ( ) .

getMainFrame ( ) ;aboutBox = new Scel taFi leAboutBox ( mainFrame ) ;aboutBox . se tLoca t ionRe la t i veTo ( mainFrame ) ;

}Sce l taF i leApp . g e t A p p l i c a t i o n ( ) . show ( aboutBox ) ;

}

/∗ ∗ This method i s c a l l e d from w i t h i n the cons t ruc to r to∗ i n i t i a l i z e the form .∗ WARNING: Do NOT modify t h i s code . The content o f t h i s

method i s∗ always regenerated by the Form E d i t o r .∗ /

@SuppressWarnings ( " unchecked " )/ / < ed i t o r−f o l d d e f a u l t s t a t e =" co l lapsed " desc =" Generated Code

">private void in i tComponents ( ) {

mainPanel = new javax . swing . JPanel ( ) ;jToolBar1 = new javax . swing . JToolBar ( ) ;jBu t ton1 = new javax . swing . JButton ( ) ;jBu t ton2 = new javax . swing . JButton ( ) ;j T e x t F i e l d 1 = new javax . swing . JTex tF ie ld ( ) ;menuBar = new javax . swing . JMenuBar ( ) ;

Page 19: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

1.1. FILE CHOOSER 19

javax . swing . JMenu f i leMenu = new javax . swing . JMenu ( ) ;jMenuItem1 = new javax . swing . JMenuItem ( ) ;jMenuItem2 = new javax . swing . JMenuItem ( ) ;javax . swing . JMenuItem exitMenuItem = new javax . swing .

JMenuItem ( ) ;javax . swing . JMenu helpMenu = new javax . swing . JMenu ( ) ;javax . swing . JMenuItem aboutMenuItem = new javax . swing .

JMenuItem ( ) ;s ta tusPanel = new javax . swing . JPanel ( ) ;javax . swing . JSeparator s ta tusPanelSeparator = new javax .

swing . JSeparator ( ) ;statusMessageLabel = new javax . swing . JLabel ( ) ;s ta tusAnimat ionLabel = new javax . swing . JLabel ( ) ;progressBar = new javax . swing . JProgressBar ( ) ;

mainPanel . setName ( " mainPanel " ) ; / / NOI18N

jToo lBar1 . se tRo l l ove r ( true ) ;jToolBar1 . setName ( " jToolBar1 " ) ; / / NOI18N

javax . swing . ActionMap actionMap = org . jdesk top . a p p l i c a t i o n. A p p l i c a t i o n . ge t Ins tance ( s c e l t a f i l e . Sce l taF i leApp .class ) . getContext ( ) . getActionMap ( Sce l taF i leV iew . class ,

th is ) ;jBu t ton1 . se tAc t ion ( actionMap . get ( " Salva " ) ) ; / / NOI18Norg . jdesk top . a p p l i c a t i o n . ResourceMap resourceMap = org .

jdesk top . a p p l i c a t i o n . A p p l i c a t i o n . ge t Ins tance (s c e l t a f i l e . Sce l taF i leApp . class ) . getContext ( ) .getResourceMap ( Sce l taF i leV iew . class ) ;

jBu t ton1 . se t Icon ( resourceMap . get Icon ( " jBu t ton1 . icon " ) ) ; / /NOI18N

jBu t ton1 . setText ( resourceMap . g e t S t r i n g ( " jBu t ton1 . t e x t " ) ) ;/ / NOI18N

jBu t ton1 . se tToo lT ipText ( resourceMap . g e t S t r i n g ( " jBu t ton1 .t oo lT i pTex t " ) ) ; / / NOI18N

jBu t ton1 . setFocusable ( fa lse ) ;jBu t ton1 . s e t H o r i z o n t a l T e x t P o s i t i o n ( javax . swing .

SwingConstants .CENTER) ;jBu t ton1 . setName ( " jBu t ton1 " ) ; / / NOI18NjBu t ton1 . s e t V e r t i c a l T e x t P o s i t i o n ( javax . swing .

SwingConstants .BOTTOM) ;jToolBar1 . add ( jBu t ton1 ) ;

jBu t ton2 . se tAc t ion ( actionMap . get ( " A p r i F i l e " ) ) ; / / NOI18NjBu t ton2 . se t Icon ( resourceMap . get Icon ( " jBu t ton2 . icon " ) ) ; / /

NOI18NjBu t ton2 . setText ( resourceMap . g e t S t r i n g ( " jBu t ton2 . t e x t " ) ) ;

/ / NOI18NjBu t ton2 . setFocusable ( fa lse ) ;jBu t ton2 . s e t H o r i z o n t a l T e x t P o s i t i o n ( javax . swing .

SwingConstants .CENTER) ;jBu t ton2 . setName ( " jBu t ton2 " ) ; / / NOI18NjBu t ton2 . setVer i fy InputWhenFocusTarget ( fa lse ) ;jBu t ton2 . s e t V e r t i c a l T e x t P o s i t i o n ( javax . swing .

SwingConstants .BOTTOM) ;jToolBar1 . add ( jBu t ton2 ) ;

j T e x t F i e l d 1 . setText ( resourceMap . ge t S t r i n g ( " j T e x t F i e l d 1 .t e x t " ) ) ; / / NOI18N

Page 20: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

20 1. APPLICAZIONI

j T e x t F i e l d 1 . setName ( " j T e x t F i e l d 1 " ) ; / / NOI18N

org . jdesk top . l ayou t . GroupLayout mainPanelLayout = new org .jdesk top . l ayou t . GroupLayout ( mainPanel ) ;

mainPanel . setLayout ( mainPanelLayout ) ;mainPanelLayout . setHor izonta lGroup (

mainPanelLayout . c rea tePara l le lGroup ( org . jdesk top .l ayou t . GroupLayout . LEADING)

. add ( jToolBar1 , org . jdesk top . l ayou t . GroupLayout .DEFAULT_SIZE , 400 , Short .MAX_VALUE)

. add ( mainPanelLayout . createSequent ia lGroup ( ). add (43 , 43 , 43). add ( jTex tF ie ld1 , org . jdesk top . l ayou t . GroupLayout .

PREFERRED_SIZE, 311 , org . jdesk top . l ayou t .GroupLayout .PREFERRED_SIZE)

. addContainerGap ( ) )) ;mainPanelLayout . se tVer t i ca lGroup (

mainPanelLayout . c rea tePara l le lGroup ( org . jdesk top .l ayou t . GroupLayout . LEADING)

. add ( mainPanelLayout . createSequent ia lGroup ( ). add ( jToolBar1 , org . jdesk top . l ayou t . GroupLayout .

PREFERRED_SIZE, 29 , org . jdesk top . l ayou t .GroupLayout .PREFERRED_SIZE)

. add (63 , 63 , 63)

. add ( jTex tF ie ld1 , org . jdesk top . l ayou t . GroupLayout .PREFERRED_SIZE, org . jdesk top . l ayou t .GroupLayout . DEFAULT_SIZE , org . jdesk top . l ayou t .GroupLayout .PREFERRED_SIZE)

. addContainerGap (186 , Short .MAX_VALUE) )) ;

menuBar . setName ( " menuBar " ) ; / / NOI18N

f i leMenu . setText ( resourceMap . ge t S t r i n g ( " f i leMenu . t e x t " ) ) ;/ / NOI18N

f i leMenu . s e t A u t o s c r o l l s ( true ) ;f i leMenu . setName ( " f i leMenu " ) ; / / NOI18N

jMenuItem1 . se tAc t ion ( actionMap . get ( " Salva " ) ) ; / / NOI18NjMenuItem1 . se tAcce le ra to r ( javax . swing . KeyStroke .

getKeyStroke ( java . awt . event . KeyEvent .VK_S, java . awt .event . InputEvent .CTRL_MASK) ) ;

jMenuItem1 . se t Icon ( resourceMap . get Icon ( " jMenuItem1 . icon " ) ); / / NOI18N

jMenuItem1 . setText ( resourceMap . g e t S t r i n g ( " jMenuItem1 . t e x t ") ) ; / / NOI18N

jMenuItem1 . setActionCommand ( resourceMap . ge t S t r i n g ( "jMenuItem1 . actionCommand " ) ) ; / / NOI18N

jMenuItem1 . setName ( " jMenuItem1 " ) ; / / NOI18Nf i leMenu . add ( jMenuItem1 ) ;

jMenuItem2 . se tAc t ion ( actionMap . get ( " A p r i F i l e " ) ) ; / / NOI18NjMenuItem2 . se t Icon ( resourceMap . get Icon ( " jMenuItem2 . icon " ) )

; / / NOI18NjMenuItem2 . setText ( resourceMap . g e t S t r i n g ( " jMenuItem2 . t e x t "

) ) ; / / NOI18NjMenuItem2 . se tToo lT ipText ( resourceMap . g e t S t r i n g ( "

jMenuItem2 . t oo lT i pTex t " ) ) ; / / NOI18NjMenuItem2 . setName ( " jMenuItem2 " ) ; / / NOI18N

Page 21: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

1.1. FILE CHOOSER 21

f i leMenu . add ( jMenuItem2 ) ;

exitMenuItem . se tAc t ion ( actionMap . get ( " q u i t " ) ) ; / / NOI18NexitMenuItem . setName ( " exitMenuItem " ) ; / / NOI18Nf i leMenu . add ( exitMenuItem ) ;

menuBar . add ( f i leMenu ) ;

helpMenu . setText ( resourceMap . ge t S t r i n g ( " helpMenu . t e x t " ) ) ;/ / NOI18N

helpMenu . setName ( " helpMenu " ) ; / / NOI18N

aboutMenuItem . se tAc t ion ( actionMap . get ( " showAboutBox " ) ) ; / /NOI18N

aboutMenuItem . setActionCommand ( resourceMap . g e t S t r i n g ( "aboutMenuItem . actionCommand " ) ) ; / / NOI18N

aboutMenuItem . setName ( " aboutMenuItem " ) ; / / NOI18NhelpMenu . add ( aboutMenuItem ) ;

menuBar . add ( helpMenu ) ;

s ta tusPanel . setName ( " s ta tusPanel " ) ; / / NOI18N

sta tusPanelSeparator . setName ( " s ta tusPanelSeparator " ) ; / /NOI18N

statusMessageLabel . setName ( " statusMessageLabel " ) ; / /NOI18N

sta tusAnimat ionLabel . se tHor i zon ta lA l ignment ( javax . swing .SwingConstants . LEFT) ;

s ta tusAnimat ionLabel . setName ( " s ta tusAnimat ionLabel " ) ; / /NOI18N

progressBar . setName ( " progressBar " ) ; / / NOI18N

org . jdesk top . l ayou t . GroupLayout statusPanelLayout = neworg . jdesk top . l ayou t . GroupLayout ( s ta tusPanel ) ;

s ta tusPanel . setLayout ( s tatusPanelLayout ) ;s ta tusPanelLayout . setHor izonta lGroup (

statusPanelLayout . c rea tePara l le lGroup ( org . jdesk top .l ayou t . GroupLayout . LEADING)

. add ( statusPanelSeparator , org . jdesk top . l ayou t .GroupLayout . DEFAULT_SIZE , 400 , Short .MAX_VALUE)

. add ( statusPanelLayout . createSequent ia lGroup ( ). addContainerGap ( ). add ( statusMessageLabel ). addPreferredGap ( org . jdesk top . l ayou t . LayoutSty le .

RELATED, 230 , Short .MAX_VALUE). add ( progressBar , org . jdesk top . l ayou t . GroupLayout .

PREFERRED_SIZE, org . jdesk top . l ayou t .GroupLayout . DEFAULT_SIZE , org . jdesk top . l ayou t .GroupLayout .PREFERRED_SIZE)

. addPreferredGap ( org . jdesk top . l ayou t . LayoutSty le .RELATED)

Page 22: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

22 1. APPLICAZIONI

. add ( s ta tusAnimat ionLabel )

. addContainerGap ( ) )) ;s ta tusPanelLayout . se tVer t i ca lGroup (

statusPanelLayout . c rea tePara l le lGroup ( org . jdesk top .l ayou t . GroupLayout . LEADING)

. add ( statusPanelLayout . createSequent ia lGroup ( ). add ( statusPanelSeparator , org . jdesk top . l ayou t .

GroupLayout .PREFERRED_SIZE, 2 , org . jdesk top .l ayou t . GroupLayout .PREFERRED_SIZE)

. addPreferredGap ( org . jdesk top . l ayou t . LayoutSty le .RELATED, org . jdesk top . l ayou t . GroupLayout .DEFAULT_SIZE , Short .MAX_VALUE)

. add ( statusPanelLayout . c rea tePara l le lGroup ( org .jdesk top . l ayou t . GroupLayout . BASELINE). add ( statusMessageLabel ). add ( s ta tusAnimat ionLabel ). add ( progressBar , org . jdesk top . l ayou t .

GroupLayout .PREFERRED_SIZE, org . jdesk top .l ayou t . GroupLayout . DEFAULT_SIZE , org .jdesk top . l ayou t . GroupLayout .PREFERRED_SIZE) )

. add (3 , 3 , 3) )) ;

setComponent ( mainPanel ) ;setMenuBar ( menuBar ) ;setSta tusBar ( s ta tusPanel ) ;

} / / </ ed i t o r−f o ld >

@Actionpublic void Salva ( ) {

S t r i n g tes to = j T e x t F i e l d 1 . getText ( ) ;S t r i n g ch ;JFrame mainFrame = Scel taF i leApp . g e t A p p l i c a t i o n ( ) .

getMainFrame ( ) ;JFi leChooser chooser = new JFi leChooser ( ) ;i n t r e tu rnVa l = chooser . showSaveDialog ( mainFrame ) ;

i n t opzione = JOptionPane .YES_OPTION;S t r i n g messaggio = " I l f i l e s c e l t o e s i s t e già , vuo i

s o v r a s c r i v e r l o ? " ;S t r i n g english_message = " The chosen f i l e a l ready

ex i s t s , you want to ove rwr i t e i t ? " ;S t r i n g t i t o l o = " At tenz ione ! ! ! ! ! Warning ! ! ! ! ! " ;

i f ( r e tu rnVa l == JFi leChooser .APPROVE_OPTION) {ch = chooser . ge tSe lec tedF i l e ( ) . getPath ( ) ;F i l e fch = new F i l e ( ch ) ;

i f ( fch . i s F i l e ( ) ) {opzione = JOptionPane . showConfirmDialog (

mainFrame , messaggio + " \ n " +english_message , t i t o l o , JOptionPane .YES_NO_OPTION) ;

}i f ( opzione == JOptionPane .YES_OPTION) {

Page 23: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

1.1. FILE CHOOSER 23

t ry {Fi leOutputStream f = new Fi leOutputStream (

fch ) ;ObjectOutputStream s = new

ObjectOutputStream ( f ) ;s . w r i t eOb jec t ( t es to ) ;s . c lose ( ) ;

} catch ( IOExcept ion e ) {JOptionPane . showMessageDialog ( mainPanel , "

Non è s ta to p o s s i b i l e sa lvare " ) ;}

}}

i f ( opzione == JOptionPane .NO_OPTION) {Salva ( ) ;

}

}

@Actionpublic void A p r i F i l e ( ) {

S t r i n g ch ;S t r i n g l i s t a = nul l ;JFrame mainFrame = Scel taF i leApp . g e t A p p l i c a t i o n ( ) .

getMainFrame ( ) ;JFi leChooser chooser = new JFi leChooser ( ) ;i n t r e tu rnVa l = chooser . showOpenDialog ( mainFrame ) ;i f ( r e tu rnVa l == JFi leChooser .APPROVE_OPTION) {

ch = chooser . ge tSe lec tedF i l e ( ) . getPath ( ) ;t ry {

F i le InputSt ream f = new Fi le InputSt ream (new F i l e (ch ) ) ;

Object InputStream s = new Object InputStream ( f ) ;t ry {

l i s t a = ( S t r i n g ) s . readObject ( ) ;} catch ( ClassNotFoundException ex ) {

Logger . getLogger ( Sce l taF i leV iew . class . getName( ) ) . log ( Level .SEVERE, null , ex ) ;

JOptionPane . showMessageDialog ( mainPanel , " Id a t i c a r i c a t i non sono c o m p a t i b i l i con i lprogramma " ) ;

}s . c lose ( ) ;

} catch ( IOExcept ion e ) {JOptionPane . showMessageDialog ( mainPanel , " Qualche

cosa non va n e l l a s c e l t a de l f i l e " ) ;}

i f ( l i s t a instanceof S t r i n g ) {

Page 24: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

24 1. APPLICAZIONI

1.2. Grafica 2D

In questo esempio vogliamo illustrare un’applicazione che consentedi disegnare sullo schermo rette, ellissi, poligoni, immagini e testovisto come elemento grafico. Cominciamo con impostare un progettousando la solita sequenza File -> New Project... -> Java -> JavaApplicationchiamiamo questo progetto JavaGrafica .

Il file più interessante sarà ovviamente JavaGraficaView.java an-dando nella modalità Design allarghiamo un po’ la finestra dellanostra applicazione , inseriamo una toolbar nella quale mettiamocinque pulsanti, quattro dei quali li dotiamo di icona e togliamo iltesto, mentre il quinto lasciamo solo il testo perché la sua azionesarà quella di far apparire del testo sullo schermo.

Nella parte rimanente della finestra inseriamo un contenitore di tipoJScrollPane , al suo interno inseriremo l’area su cui disegnare , cheva opportunamente preparata, quest’area sarà molto più grande diJScrollPane1 , questo è il nome che abbiamo dato a questo conteni-tore, ma le sbarre di scorrimento del suo contenitore ci consentiran-no di esplorarla tutta.

Il passo successivo è quello di preparare l’area su cui disegnare, maprima diamo un’occhiata a una finestra di NetBeans che ho appenascoperto, si tratta della finestra Inspector , se non è già presentesul desktop potete raggiungerla seguendo il percorso indicato nellafigura seguente:

Page 25: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

1.2. GRAFICA 2D 25

FIGURA 1.2.1. Window->Navigating->Inspector

In questa finestra è riportato l’albero di tutti i contenitori del progettocon i componenti contenuti in essi, è così facile vedere dove sonofiniti i componenti che avete immesso perché dalla vista Design nonsempre si ha la percezione precisa dove essi siano finiti. Nella figurasotto riportata è rappresentato l’albero dei contenitori con i relativicomponenti usato nel nostro progetto.

Page 26: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

26 1. APPLICAZIONI

FIGURA 1.2.2. Albero

Il prossimo compito è quello di dare funzionalità a ciascuno dei bot-toni introdotti. Il metodo classico per dare una funzionalità a un bot-tone è quello di selezionare il componente, fare click con il tastodestro, nel pop up che appare selezionare Properties , selezionarela scheda Event e successivamente selezionare actionPerformed ,viene costruito il metodo actionPerformed relativo a quel pulsantepassando al metodo il parametro Event e che rapp resenta l’eventoda gestire, ogni volta che si preme il bottone viene richiamato questometodo ed eseguito il codice in esso contenuto.

Un secondo metodo per gestire la pressione è quello di impostarela voce action della finestra Properties del bottone, vedi la figurasottostante

FIGURA 1.2.3. Action

Page 27: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

1.2. GRAFICA 2D 27

Facendo click sul tastino si apre la seguente finestra di dialogo :

FIGURA 1.2.4. Action - 2

Alla voce Action facciamo click sull’apposita linguetta e si apre unmenu a discesa nel quale scegliamo Create New Action , comeindicato in figura, date un nome alla nuova azione , stabilite unasequenza di tasti per richiamare l’azione e se volete associateleun’icona 1

1Per disegnare le icone e altri elementi grafici, come ad esempio molte dellefigure del presente articolo, ho usato un ottimo programma di grafica vettoriale

Page 28: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

28 1. APPLICAZIONI

Alla fine di tutte queste scelte l’aspetto della finestra di dialogo saràil seguente:

FIGURA 1.2.5. Finestra di dialogo per la scelta dell’azione

L’azione appena costruita si può associare ad altri componenti comead esempio una voce del menù. Ripetiamo questa procedura per

completamente libero , rilasciato con licenza GNU GENERAL PUBLIC LICENSE,si tratta di Inkscape [Inkscape - grafica vettoriale], si può scaricare dal seguenteURL http://inkscape.org/download/?lang=it

Page 29: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

1.2. GRAFICA 2D 29

ognuno dei pulsanti inseriti, alla fine avremo cinque pulsanti a cias-cuna dei quali corrisponderà una azione, come possiamo vederenel codice sorgente della classe, per ora queste azioni sono vuote,prima di riempirle replichiamo queste cinque azioni in un menu adiscesa come rappresentato nella figura seguente:

FIGURA 1.2.6. Menu forme

Diamo per scontato che si sappia inserire un menu e le sue voci,l’unica cosa che sottolineiamo è che per ciascuna voce, dopo aver-la inserita, si deve andare sulla corrispondente finestra properties

scegliere action , facendo click su settare sulla corrispondenteazione scelta dal menu a discesa che compare (vedere la figuraseguente) , automaticamente sia il nome che la combinazione di tastidi scelta rapida e l’icona vengono impostati.

FIGURA 1.2.7. Scelta dell’azione

Il passo successivo è quello di programmare le azioni dei vari pulsan-ti, essi devono disegnare qualche cosa sullo schermo, per disegnarebisogna creare una nuova classe che estenda la classe JPanel ,

Page 30: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

30 1. APPLICAZIONI

questa nuova classe l’abbiamo chiamata FoglioDisegno , per costru-irla usiamo la solita tecnica cioè mediante la sequenza :

File -> New File -> Java -> Java Class

Dopo aver costruito lo scheletro della classe facciamo l’override delmetodo paintComponent 2

FIGURA 1.2.8. Override di PaintComponent dellaclasse JPanel

La riga di codice

super.paintComponent(g);

viene aggiunta automaticamente e richiama l’analogo metodo dellaclasse super di quella attuale. Molto importante è la seconda riga dicodice:

Graphics2D gg = (Graphics2D) g;

questa riga effettua il cast dell’oggetto g, da Graphics a Graph-ics2D. La classe Graphics2D è una classe che estende la classeGraphics che è la classe utilizzata per disegnare su un pannello.L’oggetto g, passato come parametro nel metodo paintComponentè già un oggetto Graphics2D, ma viene passato come oggetto Gra-phics quindi è necessario convertirlo. La classe offre un mucchio diopportunità (vedere la relativa documentazione [Documentazione Java]) noi useremo e descriveremo solo alcune di queste proprietà.

Le tre righe successive:

2Per ottenere l’override di un metodo bisogna fare click con il taso destro e poiscegliere Insert Code

Page 31: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

1.2. GRAFICA 2D 31

FIGURA 1.2.9. Rendering Hints

sono quelle che ci consentono di disegnare con la procedura antialiasingimpostata, quindi le figure avranno dei contorni più definiti, l’ogget-to rh servirà poi in seguito per dire all’oggetto gg (oggetto di tipoGraphics2D) come comportarsi.

Successivamente abbiamo la riga di codice

BasicStroke tratto = new BasicStroke(8);

che costruisce l’oggetto tratto di tipo BasicStroke , questa classedefinisce come l’oggetto gg di tipo graphics2D deve disegnare le li-nee, tratto per ora cambia solo lo spessore della linea tutte le al-tre caratteristiche saranno standard, Per saperne di più sulla classeBasicStroke vedere [Documentazione Java].

Le linee successive definiscono un oggetto di tipo TextLayout chesarà stampato sul pannello e riprodurrà una frase stampata concaratteri definiti dall’oggetto font

FIGURA 1.2.10. Oggetto di tipo TextLayout

Page 32: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

32 1. APPLICAZIONI

La successiva parte di codice :

Font f = new Font ( " Verdana " , Font . ITALIC+Font .BOLD, 24) ;gg . setRender ingHints ( r t ) ;FontRenderContext f r c = gg . getFontRenderContext ( ) ;TextLayout s = new TextLayout ( " Frase d i c i r cos tanza " , f ,

f r c ) ;

E l l ipse2D . Double cerch io = new El l ipse2D . Double (100 , 10 ,1000 , 100) ;

Rectangle2D . Double r e t t a n g o l o = new Rectangle2D . Double(100 , 100 , 310 , 310) ;

Grad ien tPa in t g rad ien te = new Grad ien tPa in t (50 .0 f , 180.0 f ,Color . red ,

400.0 f , 180.0 f , Color . green ) ;

i n t x1Points [ ] = {0 , 100 , 0 , 100} ;i n t y1Points [ ] = {0 , 50 , 50 , 0 } ;GeneralPath polygon =

new GeneralPath ( GeneralPath .WIND_EVEN_ODD,x1Points . leng th ) ;

polygon . moveTo( x1Points [ 0 ] , y1Points [ 0 ] ) ;

for ( i n t index = 1; index < x1Points . leng th ; index ++) {polygon . l i neTo ( x1Points [ index ] , y1Points [ index ] ) ;

}

polygon . closePath ( ) ;

definisce delle figure che verranno poi stampate, per saperne di piùsu queste classi vedere la documentazione in linea [Documentazione Java].

Infine vi è la parte di codice che effettua effettivamente le operazionidi disegno in base al tasto premuto, è stata introdotta la proprietàscelta che assume valori diversi a seconda dei tasti premuti ed è im-postata dalle varie azioni definite nella classe JavaGraficaView lequali non faranno altro che impostare questa proprietà e richiamareil metodo updateUI() della classe FoglioDisegno .

Seguono i listati completi della classe FoglioDisegno e della classeJavaGraficaView .

Page 33: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

1.2. GRAFICA 2D 33

1.2.1. FoglioDisegno.java.

1 /∗2 ∗ To change t h i s template , choose Tools | Templates3 ∗ and open the template i n the e d i t o r .4 ∗ /56 package j a v a g r a f i c a ;78 import java . awt . BasicStroke ;9 import java . awt . Graphics ;

1011 /∗ ∗12 ∗13 ∗ @author papi14 ∗ /151617 import java . awt . Color ;18 import java . awt . Font ;19 import java . awt . Grad ien tPa in t ;20 import java . awt . Graphics ;21 import java . awt . Graphics2D ;22 import java . awt . Image ;23 import java . awt . geom . El l ipse2D ;24 import java . awt . Render ingHints ;25 import java . awt . T o o l k i t ;26 import java . awt . geom . GeneralPath ;27 import java . awt . geom . Rectangle2D ;28 import java . awt . f o n t . ∗ ;293031 public class Fogl ioDisegno extends javax . swing . JPanel {3233 @Override34 protected void paintComponent ( Graphics g ) {35 super . paintComponent ( g ) ;

Page 34: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

34 1. APPLICAZIONI

12 Graphics2D gg = ( Graphics2D ) g ;34 RenderingHints rh = new Render ingHints (5 RenderingHints . KEY_ANTIALIASING ,6 RenderingHints . VALUE_ANTIALIAS_ON) ;789 RenderingHints r t = new Render ingHints (

10 RenderingHints . KEY_TEXT_ANTIALIASING ,11 RenderingHints . VALUE_TEXT_ANTIALIAS_ON) ;1213 BasicStroke t r a t t o = new BasicStroke ( 8 ) ;1415 Font f = new Font ( " Verdana " , Font . ITALIC+Font .BOLD, 24) ;16 gg . setRender ingHints ( r t ) ;17 FontRenderContext f r c = gg . getFontRenderContext ( ) ;18 TextLayout s = new TextLayout ( " Frase d i c i r cos tanza " , f ,

f r c ) ;192021 El l ipse2D . Double cerch io = new El l ipse2D . Double (100 , 10 ,

1000 , 100) ;22 Rectangle2D . Double r e t t a n g o l o = new Rectangle2D . Double

(100 , 100 , 310 , 310) ;23 Grad ien tPa in t g rad ien te = new Grad ien tPa in t (50 .0 f , 180.0 f ,

Color . red ,24 400.0 f , 180.0 f , Color . green ) ;2526 i n t x1Points [ ] = {0 , 100 , 0 , 100} ;27 i n t y1Points [ ] = {0 , 50 , 50 , 0 } ;28 GeneralPath polygon =29 new GeneralPath ( GeneralPath .WIND_EVEN_ODD,

x1Points . leng th ) ;30 polygon . moveTo( x1Points [ 0 ] , y1Points [ 0 ] ) ;3132 for ( i n t index = 1; index < x1Points . leng th ; index ++) {33 polygon . l i neTo ( x1Points [ index ] , y1Points [ index ] ) ;34 }

Page 35: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

1.2. GRAFICA 2D 35

12 polygon . closePath ( ) ;345 / / gg . se tCo lor ( Color . red ) ;6 / / gg . draw ( cerch io ) ;7 / / gg . se tCo lor ( Color .GREEN) ;8 / / gg . draw ( polygon ) ;9 / / gg . se tCo lor ( Color .BLUE) ;

10 / / gg . draw ( r e t t a n g o l o ) ;1112 switch ( s c e l t a ) {13 case 1: {14 gg . setRender ingHints ( rh ) ;15 gg . se tCo lor ( Color . red ) ;16 gg . se tSt roke ( t r a t t o ) ;17 gg . draw ( cerch io ) ;18 gg . se tCo lor ( Color . ye l low ) ;19 gg . f i l l ( ce rch io ) ;20 }21 break ;2223 case 2: {24 gg . setRender ingHints ( rh ) ;25 gg . se tCo lor ( Color .GREEN) ;26 gg . draw ( polygon ) ;27 }28 break ;2930 case 3: {31 gg . setRender ingHints ( rh ) ;32 gg . se tCo lor ( Color .BLUE) ;33 gg . draw ( r e t t a n g o l o ) ;34 gg . se tPa in t ( g rad ien te ) ;35 gg . f i l l ( r e t t a n g o l o ) ;

Page 36: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

36 1. APPLICAZIONI

1 }2 break ;34 case 4: {5 gg . setRender ingHints ( r t ) ;6 s . draw ( gg , 150 , 50) ;7 }8 break ;9

10 case 5: {11 T o o l k i t t o o l k i t = T o o l k i t . g e t D e f a u l t T o o l k i t ( ) ;12 Image immagine = t o o l k i t . getImage ( img ) ;13 gg . drawImage ( immagine , 100 , 100 , th is ) ;14 }15 break ;1617 defaul t : {18 gg . setRender ingHints ( r t ) ;19 gg . drawStr ing ( " Nessuna se lez ione " , 20 , 20) ;20 }21 }2223 }2425 private i n t s c e l t a = 0 ;2627 /∗ ∗28 ∗ Get the value o f s c e l t a29 ∗30 ∗ @return the value o f s c e l t a31 ∗ /32 public i n t getSce l ta ( ) {33 return s c e l t a ;34 }

Page 37: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

1.2. GRAFICA 2D 37

1.2.2. JavaGraficaView.java.

1 /∗2 ∗ JavaGraf icaView . java3 ∗ /45 package j a v a g r a f i c a ;67 import org . jdesk top . a p p l i c a t i o n . Act ion ;8 import org . jdesk top . a p p l i c a t i o n . ResourceMap ;9 import org . jdesk top . a p p l i c a t i o n . S ing leFrameAppl ica t ion ;

10 import org . jdesk top . a p p l i c a t i o n . FrameView ;11 import org . jdesk top . a p p l i c a t i o n . TaskMonitor ;12 import java . awt . event . Act ionEvent ;13 import java . awt . event . Ac t i onL i s t ene r ;14 import javax . swing . Timer ;15 import javax . swing . Icon ;16 import javax . swing . JDia log ;17 import javax . swing . JFi leChooser ;18 import javax . swing . JFrame ;19 import javax . swing . JOptionPane ;20 import javax . swing . f i l e c h o o s e r . F i leNameExtens ionF i l te r ;2122 /∗ ∗23 ∗ The a p p l i c a t i o n ’ s main frame .24 ∗ /25 public class JavaGraf icaView extends FrameView {2627 public JavaGraf icaView ( Sing leFrameAppl ica t ion app ) {28 super ( app ) ;2930 ini tComponents ( ) ;3132 / / s ta tus bar i n i t i a l i z a t i o n − message t imeout , i d l e icon

and busy animation , e tc33 ResourceMap resourceMap = getResourceMap ( ) ;34 i n t messageTimeout = resourceMap . ge t I n tege r ( " StatusBar .

messageTimeout " ) ;35 messageTimer = new Timer ( messageTimeout , new

Ac t i onL i s t ene r ( ) {

Page 38: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

38 1. APPLICAZIONI

1 public void act ionPerformed ( Act ionEvent e ) {2 statusMessageLabel . se tText ( " " ) ;3 }4 } ) ;5 messageTimer . setRepeats ( fa lse ) ;6 i n t busyAnimationRate = resourceMap . ge t I n tege r ( " StatusBar .

busyAnimationRate " ) ;7 for ( i n t i = 0 ; i < busyIcons . leng th ; i ++) {8 busyIcons [ i ] = resourceMap . get Icon ( " StatusBar .

busyIcons [ " + i + " ] " ) ;9 }

10 busyIconTimer = new Timer ( busyAnimationRate , newAc t i onL i s t ene r ( ) {

11 public void act ionPerformed ( Act ionEvent e ) {12 busyIconIndex = ( busyIconIndex + 1) % busyIcons .

leng th ;13 sta tusAnimat ionLabel . se t Icon ( busyIcons [

busyIconIndex ] ) ;14 }15 } ) ;16 i d l e I c o n = resourceMap . get Icon ( " StatusBar . i d l e I c o n " ) ;17 s ta tusAnimat ionLabel . se t Icon ( i d l e I c o n ) ;18 progressBar . s e t V i s i b l e ( fa lse ) ;1920 / / connect ing ac t i on tasks to s ta tus bar v ia TaskMonitor21 TaskMonitor taskMoni to r = new TaskMonitor ( g e t A p p l i c a t i o n ( )

. getContext ( ) ) ;22 taskMoni to r . addPropertyChangeListener (new java . beans .

PropertyChangeListener ( ) {23 public void propertyChange ( java . beans .

PropertyChangeEvent ev t ) {24 S t r i n g propertyName = evt . getPropertyName ( ) ;25 i f ( " s t a r t e d " . equals ( propertyName ) ) {26 i f ( ! busyIconTimer . isRunning ( ) ) {27 s ta tusAnimat ionLabel . se t Icon ( busyIcons [ 0 ] )

;28 busyIconIndex = 0;29 busyIconTimer . s t a r t ( ) ;30 }31 progressBar . s e t V i s i b l e ( true ) ;32 progressBar . se t Inde te rmina te ( true ) ;33 } else i f ( " done " . equals ( propertyName ) ) {34 busyIconTimer . stop ( ) ;35 s ta tusAnimat ionLabel . se t Icon ( i d l e I c o n ) ;

Page 39: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

1.2. GRAFICA 2D 39

1 progressBar . s e t V i s i b l e ( fa lse ) ;2 progressBar . setValue ( 0 ) ;3 } else i f ( " message " . equals ( propertyName ) ) {4 S t r i n g t e x t = ( S t r i n g ) ( ev t . getNewValue ( ) ) ;5 statusMessageLabel . se tText ( ( t e x t == nul l ) ? " "

: t e x t ) ;6 messageTimer . r e s t a r t ( ) ;7 } else i f ( " progress " . equals ( propertyName ) ) {8 i n t value = ( In tege r ) ( ev t . getNewValue ( ) ) ;9 progressBar . s e t V i s i b l e ( true ) ;

10 progressBar . se t Inde te rmina te ( fa lse ) ;11 progressBar . setValue ( value ) ;12 }13 }14 } ) ;15 }1617 @Action18 public void showAboutBox ( ) {19 i f ( aboutBox == nul l ) {20 JFrame mainFrame = JavaGraficaApp . g e t A p p l i c a t i o n ( ) .

getMainFrame ( ) ;21 aboutBox = new JavaGraficaAboutBox ( mainFrame ) ;22 aboutBox . se tLoca t ionRe la t i veTo ( mainFrame ) ;23 }24 JavaGraficaApp . g e t A p p l i c a t i o n ( ) . show ( aboutBox ) ;25 }2627 /∗ ∗ This method i s c a l l e d from w i t h i n the cons t ruc to r to28 ∗ i n i t i a l i z e the form .29 ∗ WARNING: Do NOT modify t h i s code . The content o f t h i s

method i s30 ∗ always regenerated by the Form E d i t o r .31 ∗ /32 @SuppressWarnings ( " unchecked " )33 / / < ed i t o r−f o l d d e f a u l t s t a t e =" co l lapsed " desc =" Generated Code

">34 private void in i tComponents ( ) {

Page 40: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

40 1. APPLICAZIONI

1 mainPanel = new javax . swing . JPanel ( ) ;2 jToolBar1 = new javax . swing . JToolBar ( ) ;3 jBu t ton1 = new javax . swing . JButton ( ) ;4 jBu t ton2 = new javax . swing . JButton ( ) ;5 jBu t ton3 = new javax . swing . JButton ( ) ;6 jBu t ton4 = new javax . swing . JButton ( ) ;7 jBu t ton5 = new javax . swing . JButton ( ) ;8 jScro l lPane1 = new javax . swing . JScrol lPane ( ) ;9 fog l ioDisegno1 = new j a v a g r a f i c a . Fogl ioDisegno ( ) ;

10 menuBar = new javax . swing . JMenuBar ( ) ;11 javax . swing . JMenu f i leMenu = new javax . swing . JMenu ( ) ;12 javax . swing . JMenuItem exitMenuItem = new javax . swing .

JMenuItem ( ) ;13 jMenu1 = new javax . swing . JMenu ( ) ;14 jMenuItem1 = new javax . swing . JMenuItem ( ) ;15 jMenuItem2 = new javax . swing . JMenuItem ( ) ;16 jMenuItem3 = new javax . swing . JMenuItem ( ) ;17 jMenuItem4 = new javax . swing . JMenuItem ( ) ;18 jMenuItem5 = new javax . swing . JMenuItem ( ) ;19 javax . swing . JMenu helpMenu = new javax . swing . JMenu ( ) ;20 javax . swing . JMenuItem aboutMenuItem = new javax . swing .

JMenuItem ( ) ;21 sta tusPanel = new javax . swing . JPanel ( ) ;22 javax . swing . JSeparator s ta tusPanelSeparator = new javax .

swing . JSeparator ( ) ;23 statusMessageLabel = new javax . swing . JLabel ( ) ;24 s ta tusAnimat ionLabel = new javax . swing . JLabel ( ) ;25 progressBar = new javax . swing . JProgressBar ( ) ;2627 mainPanel . setName ( " mainPanel " ) ; / / NOI18N2829 jToolBar1 . se tRo l l ove r ( true ) ;30 jToolBar1 . setName ( " jToolBar1 " ) ; / / NOI18N3132 javax . swing . ActionMap actionMap = org . jdesk top . a p p l i c a t i o n

. A p p l i c a t i o n . ge t Ins tance ( j a v a g r a f i c a . JavaGraficaApp .class ) . getContext ( ) . getActionMap ( JavaGraficaView . class, th is ) ;

33 jBu t ton1 . se tAc t ion ( actionMap . get ( " e l l i s s e " ) ) ; / / NOI18N34 org . jdesk top . a p p l i c a t i o n . ResourceMap resourceMap = org .

jdesk top . a p p l i c a t i o n . A p p l i c a t i o n . ge t Ins tance (j a v a g r a f i c a . JavaGraficaApp . class ) . getContext ( ) .getResourceMap ( JavaGraficaView . class ) ;

35 jBu t ton1 . setText ( resourceMap . g e t S t r i n g ( " jBu t ton1 . t e x t " ) ) ;/ / NOI18N

Page 41: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

1.2. GRAFICA 2D 41

1 jBu t ton1 . setFocusable ( fa lse ) ;2 jBu t ton1 . s e t H o r i z o n t a l T e x t P o s i t i o n ( javax . swing .

SwingConstants .CENTER) ;3 jBu t ton1 . setName ( " jBu t ton1 " ) ; / / NOI18N4 jBu t ton1 . s e t V e r t i c a l T e x t P o s i t i o n ( javax . swing .

SwingConstants .BOTTOM) ;5 jToolBar1 . add ( jBu t ton1 ) ;67 jBu t ton2 . se tAc t ion ( actionMap . get ( " t r a i e t t o r i a " ) ) ; / /

NOI18N8 jBu t ton2 . setText ( resourceMap . g e t S t r i n g ( " jBu t ton2 . t e x t " ) ) ;

/ / NOI18N9 jBu t ton2 . setFocusable ( fa lse ) ;

10 jBu t ton2 . s e t H o r i z o n t a l T e x t P o s i t i o n ( javax . swing .SwingConstants .CENTER) ;

11 jBu t ton2 . setName ( " jBu t ton2 " ) ; / / NOI18N12 jBu t ton2 . s e t V e r t i c a l T e x t P o s i t i o n ( javax . swing .

SwingConstants .BOTTOM) ;13 jToolBar1 . add ( jBu t ton2 ) ;1415 jBu t ton3 . se tAc t ion ( actionMap . get ( " r e t t a n g o l o " ) ) ; / / NOI18N16 jBu t ton3 . setText ( resourceMap . g e t S t r i n g ( " jBu t ton3 . t e x t " ) ) ;

/ / NOI18N17 jBu t ton3 . setFocusable ( fa lse ) ;18 jBu t ton3 . s e t H o r i z o n t a l T e x t P o s i t i o n ( javax . swing .

SwingConstants .CENTER) ;19 jBu t ton3 . setName ( " jBu t ton3 " ) ; / / NOI18N20 jBu t ton3 . s e t V e r t i c a l T e x t P o s i t i o n ( javax . swing .

SwingConstants .BOTTOM) ;21 jToolBar1 . add ( jBu t ton3 ) ;2223 jBu t ton4 . se tAc t ion ( actionMap . get ( " t es to " ) ) ; / / NOI18N24 jBu t ton4 . setFocusable ( fa lse ) ;25 jBu t ton4 . s e t H o r i z o n t a l T e x t P o s i t i o n ( javax . swing .

SwingConstants .CENTER) ;26 jBu t ton4 . setName ( " jBu t ton4 " ) ; / / NOI18N27 jBu t ton4 . s e t V e r t i c a l T e x t P o s i t i o n ( javax . swing .

SwingConstants .BOTTOM) ;28 jToolBar1 . add ( jBu t ton4 ) ;2930 jBu t ton5 . se tAc t ion ( actionMap . get ( " immagine " ) ) ; / / NOI18N31 jBu t ton5 . setText ( resourceMap . g e t S t r i n g ( " jBu t ton5 . t e x t " ) ) ;

/ / NOI18N32 jBu t ton5 . setName ( " jBu t ton5 " ) ; / / NOI18N33 jToolBar1 . add ( jBu t ton5 ) ;3435 jScro l lPane1 . setName ( " jScro l lPane1 " ) ; / / NOI18N

Page 42: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

42 1. APPLICAZIONI

1 jScro l lPane1 . se tPre fe r redS ize (new java . awt . Dimension (2000 ,2000) ) ;

23 fog l ioDisegno1 . setName ( " fog l ioDisegno1 " ) ; / / NOI18N4 fog l ioDisegno1 . se tPre fe r redS ize (new java . awt . Dimension

(2000 , 2000) ) ;56 javax . swing . GroupLayout fog l ioDisegno1Layout = new javax .

swing . GroupLayout ( fog l ioDisegno1 ) ;7 fog l ioDisegno1 . setLayout ( fog l ioDisegno1Layout ) ;8 fog l ioDisegno1Layout . setHor izonta lGroup (9 fog l ioDisegno1Layout . c rea tePara l le lGroup ( javax . swing .

GroupLayout . Al ignment . LEADING)10 . addGap(0 , 2000 , Short .MAX_VALUE)11 ) ;12 fog l ioDisegno1Layout . se tVer t i ca lGroup (13 fog l ioDisegno1Layout . c rea tePara l le lGroup ( javax . swing .

GroupLayout . Al ignment . LEADING)14 . addGap(0 , 2000 , Short .MAX_VALUE)15 ) ;1617 jScro l lPane1 . setViewportView ( fog l ioDisegno1 ) ;1819 javax . swing . GroupLayout mainPanelLayout = new javax . swing .

GroupLayout ( mainPanel ) ;20 mainPanel . setLayout ( mainPanelLayout ) ;21 mainPanelLayout . setHor izonta lGroup (22 mainPanelLayout . c rea tePara l le lGroup ( javax . swing .

GroupLayout . Al ignment . LEADING)23 . addGroup ( mainPanelLayout . createSequent ia lGroup ( )24 . addGroup ( mainPanelLayout . c rea tePara l le lGroup (

javax . swing . GroupLayout . Al ignment . LEADING)25 . addComponent ( jToolBar1 , javax . swing .

GroupLayout .PREFERRED_SIZE, javax . swing .GroupLayout . DEFAULT_SIZE , javax . swing .GroupLayout .PREFERRED_SIZE)

26 . addGroup ( javax . swing . GroupLayout . Al ignment .TRAILING , mainPanelLayout .createSequent ia lGroup ( )

27 . addContainerGap ( )28 . addComponent ( jScro l lPane1 , javax . swing .

GroupLayout . DEFAULT_SIZE , 685 , Short .MAX_VALUE) ) )

29 . addContainerGap ( ) )30 ) ;31 mainPanelLayout . se tVer t i ca lGroup (32 mainPanelLayout . c rea tePara l le lGroup ( javax . swing .

GroupLayout . Al ignment . LEADING)33 . addGroup ( mainPanelLayout . createSequent ia lGroup ( )34 . addComponent ( jToolBar1 , javax . swing . GroupLayout .

PREFERRED_SIZE, javax . swing . GroupLayout .DEFAULT_SIZE , javax . swing . GroupLayout .PREFERRED_SIZE)

35 . addPreferredGap ( javax . swing . LayoutSty le .ComponentPlacement .RELATED)

Page 43: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

1.2. GRAFICA 2D 43

1 . addComponent ( jScro l lPane1 , javax . swing .GroupLayout . DEFAULT_SIZE , 478 , Short .MAX_VALUE)

2 . addContainerGap ( ) )3 ) ;45 menuBar . setName ( " menuBar " ) ; / / NOI18N67 f i leMenu . setText ( resourceMap . g e t S t r i n g ( " f i leMenu . t e x t " ) ) ;

/ / NOI18N8 f i leMenu . setName ( " f i leMenu " ) ; / / NOI18N9

10 exitMenuItem . se tAc t ion ( actionMap . get ( " q u i t " ) ) ; / / NOI18N11 exitMenuItem . setName ( " exitMenuItem " ) ; / / NOI18N12 f i leMenu . add ( exitMenuItem ) ;1314 menuBar . add ( f i leMenu ) ;1516 jMenu1 . setText ( resourceMap . g e t S t r i n g ( " jMenu1 . t e x t " ) ) ; / /

NOI18N17 jMenu1 . setName ( " jMenu1 " ) ; / / NOI18N1819 jMenuItem1 . se tAc t ion ( actionMap . get ( " e l l i s s e " ) ) ; / / NOI18N20 jMenuItem1 . setText ( resourceMap . g e t S t r i n g ( " jMenuItem1 . t e x t "

) ) ; / / NOI18N21 jMenuItem1 . setName ( " jMenuItem1 " ) ; / / NOI18N22 jMenu1 . add ( jMenuItem1 ) ;2324 jMenuItem2 . se tAc t ion ( actionMap . get ( " t r a i e t t o r i a " ) ) ; / /

NOI18N25 jMenuItem2 . setText ( resourceMap . g e t S t r i n g ( " jMenuItem2 . t e x t "

) ) ; / / NOI18N26 jMenuItem2 . setName ( " jMenuItem2 " ) ; / / NOI18N27 jMenu1 . add ( jMenuItem2 ) ;2829 jMenuItem3 . se tAc t ion ( actionMap . get ( " r e t t a n g o l o " ) ) ; / /

NOI18N30 jMenuItem3 . setText ( resourceMap . g e t S t r i n g ( " jMenuItem3 . t e x t "

) ) ; / / NOI18N31 jMenuItem3 . setName ( " jMenuItem3 " ) ; / / NOI18N32 jMenu1 . add ( jMenuItem3 ) ;3334 jMenuItem4 . se tAc t ion ( actionMap . get ( " t es to " ) ) ; / / NOI18N35 jMenuItem4 . setText ( resourceMap . g e t S t r i n g ( " jMenuItem4 . t e x t "

) ) ; / / NOI18N

Page 44: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

44 1. APPLICAZIONI

1 jMenuItem4 . setName ( " jMenuItem4 " ) ; / / NOI18N2 jMenu1 . add ( jMenuItem4 ) ;34 jMenuItem5 . se tAc t ion ( actionMap . get ( " immagine " ) ) ; / / NOI18N5 jMenuItem5 . setText ( resourceMap . g e t S t r i n g ( " jMenuItem5 . t e x t "

) ) ; / / NOI18N6 jMenuItem5 . setName ( " jMenuItem5 " ) ; / / NOI18N7 jMenu1 . add ( jMenuItem5 ) ;89 menuBar . add ( jMenu1 ) ;

1011 helpMenu . setText ( resourceMap . g e t S t r i n g ( " helpMenu . t e x t " ) ) ;

/ / NOI18N12 helpMenu . setName ( " helpMenu " ) ; / / NOI18N1314 aboutMenuItem . se tAc t ion ( actionMap . get ( " showAboutBox " ) ) ; / /

NOI18N15 aboutMenuItem . setName ( " aboutMenuItem " ) ; / / NOI18N16 helpMenu . add ( aboutMenuItem ) ;1718 menuBar . add ( helpMenu ) ;1920 sta tusPanel . setName ( " s ta tusPanel " ) ; / / NOI18N2122 statusMessageLabel . setName ( " statusMessageLabel " ) ; / /

NOI18N2324 sta tusAnimat ionLabel . se tHor i zon ta lA l ignment ( javax . swing .

SwingConstants . LEFT) ;25 sta tusAnimat ionLabel . setName ( " s ta tusAnimat ionLabel " ) ; / /

NOI18N2627 progressBar . setName ( " progressBar " ) ; / / NOI18N2829 javax . swing . GroupLayout statusPanelLayout = new javax .

swing . GroupLayout ( s ta tusPanel ) ;30 sta tusPanel . setLayout ( s tatusPanelLayout ) ;31 statusPanelLayout . setHor izonta lGroup (32 statusPanelLayout . c rea tePara l le lGroup ( javax . swing .

GroupLayout . Al ignment . LEADING)33 . addComponent ( s tatusPanelSeparator , javax . swing .

GroupLayout . DEFAULT_SIZE , 705 , Short .MAX_VALUE)34 . addGroup ( statusPanelLayout . createSequent ia lGroup ( )35 . addContainerGap ( )

Page 45: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

1.2. GRAFICA 2D 45

1 . addComponent ( statusMessageLabel )2 . addPreferredGap ( javax . swing . LayoutSty le .

ComponentPlacement .RELATED, 535 , Short .MAX_VALUE)

3 . addComponent ( progressBar , javax . swing . GroupLayout.PREFERRED_SIZE, javax . swing . GroupLayout .DEFAULT_SIZE , javax . swing . GroupLayout .PREFERRED_SIZE)

4 . addPreferredGap ( javax . swing . LayoutSty le .ComponentPlacement .RELATED)

5 . addComponent ( s ta tusAnimat ionLabel )6 . addContainerGap ( ) )7 ) ;8 statusPanelLayout . se tVer t i ca lGroup (9 statusPanelLayout . c rea tePara l le lGroup ( javax . swing .

GroupLayout . Al ignment . LEADING)10 . addGroup ( statusPanelLayout . createSequent ia lGroup ( )11 . addComponent ( s tatusPanelSeparator , javax . swing .

GroupLayout .PREFERRED_SIZE, 2 , javax . swing .GroupLayout .PREFERRED_SIZE)

12 . addPreferredGap ( javax . swing . LayoutSty le .ComponentPlacement .RELATED, javax . swing .GroupLayout . DEFAULT_SIZE , Short .MAX_VALUE)

13 . addGroup ( statusPanelLayout . c rea tePara l le lGroup (javax . swing . GroupLayout . Al ignment . BASELINE)

14 . addComponent ( statusMessageLabel )15 . addComponent ( s ta tusAnimat ionLabel )16 . addComponent ( progressBar , javax . swing .

GroupLayout .PREFERRED_SIZE, javax . swing .GroupLayout . DEFAULT_SIZE , javax . swing .GroupLayout .PREFERRED_SIZE) )

17 . addGap(3 , 3 , 3) )18 ) ;1920 setComponent ( mainPanel ) ;21 setMenuBar ( menuBar ) ;22 setStatusBar ( s ta tusPanel ) ;23 } / / </ ed i t o r−f o ld >2425 @Action26 public void e l l i s s e ( ) {27 fog l ioDisegno1 . se tSce l ta ( 1 ) ;28 fog l ioDisegno1 . updateUI ( ) ;29 }3031 @Action32 public void t r a i e t t o r i a ( ) {33 fog l ioDisegno1 . se tSce l ta ( 2 ) ;34 fog l ioDisegno1 . updateUI ( ) ;

Page 46: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

46 1. APPLICAZIONI

1 }23 @Action4 public void r e t t a n g o l o ( ) {5 fog l ioDisegno1 . se tSce l ta ( 3 ) ;6 fog l ioDisegno1 . updateUI ( ) ;78 }9

10 @Action11 public void t e s t o ( ) {12 fog l ioDisegno1 . se tSce l ta ( 4 ) ;13 fog l ioDisegno1 . updateUI ( ) ;14 }1516 @Action17 public void immagine ( ) {18 S t r i n g ch ;19 JFi leChooser chooser =new JFi leChooser ( ) ;20 F i leNameExtens ionF i l te r f i l t e r = new

Fi leNameExtens ionF i l te r (21 "JPG & GIF Images " , " jpg " , " g i f " ) ;22 chooser . s e t F i l e F i l t e r ( f i l t e r ) ;2324 i n t r e tu rnVa l =chooser . showOpenDialog ( mainPanel ) ;25 i f ( r e tu rnVa l == JFi leChooser .APPROVE_OPTION) {26 ch = chooser . ge tSe lec tedF i l e ( ) . getPath ( ) ;27 fog l ioDisegno1 . setImg ( ch ) ;28 fog l ioDisegno1 . se tSce l ta ( 5 ) ;29 fog l ioDisegno1 . updateUI ( ) ;30 } else {31 JOptionPane . showMessageDialog ( mainPanel , " Qualche

cosa è andato s t o r t o " ) ;32 }3334 }

Page 47: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

1.2. GRAFICA 2D 47

1 / / Var iab les d e c l a r a t i o n − do not modify2 private j a v a g r a f i c a . Fogl ioDisegno fog l ioDisegno1 ;3 private javax . swing . JButton jBu t ton1 ;4 private javax . swing . JButton jBu t ton2 ;5 private javax . swing . JButton jBu t ton3 ;6 private javax . swing . JButton jBu t ton4 ;7 private javax . swing . JButton jBu t ton5 ;8 private javax . swing . JMenu jMenu1 ;9 private javax . swing . JMenuItem jMenuItem1 ;

10 private javax . swing . JMenuItem jMenuItem2 ;11 private javax . swing . JMenuItem jMenuItem3 ;12 private javax . swing . JMenuItem jMenuItem4 ;13 private javax . swing . JMenuItem jMenuItem5 ;14 private javax . swing . JScrol lPane jScro l lPane1 ;15 private javax . swing . JToolBar jToolBar1 ;16 private javax . swing . JPanel mainPanel ;17 private javax . swing . JMenuBar menuBar ;18 private javax . swing . JProgressBar progressBar ;19 private javax . swing . JLabel s ta tusAnimat ionLabel ;20 private javax . swing . JLabel statusMessageLabel ;21 private javax . swing . JPanel s ta tusPanel ;22 / / End of v a r i a b l es d e c l a r a t i o n2324 private f i n a l Timer messageTimer ;25 private f i n a l Timer busyIconTimer ;26 private f i n a l Icon i d l e I c o n ;27 private f i n a l Icon [ ] busyIcons = new Icon [ 1 5 ] ;28 private i n t busyIconIndex = 0;2930 private JDia log aboutBox ;31 }

Page 48: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE
Page 49: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

Indice analitico

action, 26Antialiasing, 31APPROVE_OPTION, 11Apri, 15

cast, 30

FileChooser, 11

Graphics2D, 30

Inspector, 24

JScrollPane, 24

paintComponent, 30Properties, 26

49

Page 50: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE
Page 51: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

Bibliografia

51

Page 52: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE
Page 53: NetBeans - Esempi · sappia costruire un progetto del tipo Java->Java Desktop Application, inoltre diamo per scontato che il lettore abbia già una certa dimes-tichezza con l’IDE

Bibliografia

[IDE - NetBeans] NetBeans è un IDE particolarmente adatto per scri-vere programmi in Java si può liberamente scaricare alseguente indirizzo http://www.netbeans.org

[Inkscape - grafica vettoriale] Inkscape è un ottimo programma di grafica vet-toriale liberamente scaricabile da http://inkscape.org/download/?lang=it

[Documentazione Java] Documentazione ufficiale Java http://java.sun.com/javase/6/docs/api/

53