Anda di halaman 1dari 20

Elementi dellinterfaccia utente Swing: Pannelli

Premessa
Supponiamo di voler creare la seguente interfaccia utente.

casella di testo (textfield)


pulsanti radio (radio button)

pulsante (button)

Figura 1 Una semplice UI

Linterfaccia utente contiene i seguenti componenti:


una casella di testo, nella quale lutente pu scrivere;
due pulsanti radio, Nero e Rosso, che consentono allutente di scegliere il colore del
testo;
un pulsante Colora che permette di applicare al testo il colore scelto.
Nonostante linterfaccia sia molto semplice, impossibile crearla avendo a disposizione
solo il frame e il pannello del contenuto. Nella figura seguente viene mostrato come
apparirebbe linterfaccia se si utilizzasse come contenitore dei componenti descritti il solo
pannello del contenuto.

Figura 2 UI con componenti aggiunti al pannello del contenuto

Bocchi Cinzia

15/01/2015

Osservando la figura 2 si pu notare che i componenti sono disposti in modo diverso dalla
UI di figura 1: il pulsante occupa tutta larea inferiore del frame e i pulsanti radio si trovano
alle estremit della finestra. La causa della diversa disposizione da attribuire al layout
predefinito del pannello del contenuto. E evidente, allora, che non sufficiente aggiungere
componenti alla finestra ma occorre, prima, scegliere il layout pi adatto.

Indice
Layout del pannello del contenuto: layout di bordo
La classe BorderLayout
Modificare il layout predefinito di un contenitore
Pannelli generici e classe JPanel: layout di flusso
La classe FlowLayout
Creare un pannello come istanza della classe JPanel
Creare un pannello come istanza di una classe derivata da JPanel
Pannelli con Window Builder
Videolezioni (link esterni)
Java Swing Creare pannelli personalizzati Parte 1
Java Swing Creare pannelli personalizzati Parte 2
Java Swing Creare pannelli personalizzati Parte 3

Bocchi Cinzia

15/01/2015

Layout del pannello del contenuto: layout di bordo


Il pannello del contenuto un pannello predefinito che viene creato insieme ad ogni
istanza della classe JFrame e sul quale si possono disporre i componenti dellinterfaccia
utente. La disposizione non casuale ma determinata da un ben preciso gestore di layout,
cio una classe che stabilisce in quale modo i componenti devono essere disposti, quando
vengono aggiunti ad un contenitore. Il gestore di layout del pannello del contenuto la
classe java.awt.BorderLayout.
Larea del pannello del contenuto suddivisa in cinque aree, denominate NORTH,
SOUTH, EAST, WEST, CENTER, come mostrato in figura 3.

NORTH

WEST

CENTER

EAST

SOUTH

Figura 3 Aree del pannello del contenuto

Quando si aggiunge un componente al pannello del contenuto occorre specificare in quale


delle cinque aree caricarlo. In assenza di indicazioni, il componente verr inserito nella
zona centrale. In ciascuna area si pu inserire un solo componente: se ne inseriamo pi di
uno, verr visualizzato solo quello aggiunto per ultimo.
La dimensione delle aree del pannello del contenuto non fissa ma si adatta alla
dimensione del componente inserito. Tuttavia, il componente occupa tutta larea a
disposizione. Per capire meglio, si osservi la figura 2:
- il pulsante Colora si estende da sinistra a destra, occupando tutta larea SOUTH;
- il pulsante radio Nero occupa tutta larea WEST;
- il pulsante radio Rosso occupa tutta larea EAST;
- la casella di testo occupa tutta larea NORTH.
Bocchi Cinzia

15/01/2015

La classe BorderLayout

Figura 4 La classe BorderLayout

La classe BorderLayout definisce 5 stringhe costanti per individuare le aree ove collocare i
componenti:
- public static final String CENTER;
- public static final String EAST;
- public static final String NORTH;
- public static final String SOUTH;
- public static final String WEST;
e fornisce i seguenti due costruttori
public BorderLayout()
Crea un gestore di layout di bordo senza spazio tra i componenti.

public BorderLayout(int hgap, int vgap)


Crea un gestore di layout di bordo con lo spazio specificato tra i componenti. Lo spazio orizzontale
denotato con hgap; quello verticale con vgap.

Linserimento di un componente allinterno di unarea avviene utilizzando il metodo add


della classe java.awt.Container, nel seguente modo:
contenitore.add(componente, area);
dove componente il componente da aggiungere e area una delle 5 costanti della
classe BorderLayout viste in precedenza.
Per esempio, se si vuole aggiungere il pulsante colora allarea SOUTH del pannello del
contenuto, si dovr scrivere:
getContentPane().add(colora, BorderLayout.SOUTH);

Bocchi Cinzia

15/01/2015

Il metodo add della classe Container definito in varie forme; nella tabella seguente ne
sono indicate due:
public Component add(Component comp)
Aggiunge il componente specificato alla fine del contenitore.

public Component add(Component comp, Object constraints)


Aggiunge il componente specificato alla fine del contenitore e notifica al gestore di layout di
applicare i vincoli specificati.

Dalle considerazioni fatte, risulta evidente che il layout predefinito del pannello del
contenuto non adatto a realizzare la UI di figura 1. Le strade che possiamo perseguire,
per risolvere il problema, sono 3:
1. cambiare il layout del pannello del contenuto;
2. annullare qualsiasi layout e disporre i componenti specificando, per ciascuno di essi, la
posizione e la dimensione assolute;
3. utilizzare contenitori con un diverso layout, i pannelli generici, che sono istanze della
classe JPanel.

Modificare il layout predefinito di un contenitore


E' possibile modificare il gestore di layout predefinito mediante il metodo setLayout della
classe Container:
public void setLayout(LayoutManager mgr)
Imposta il gestore di layout a mgr.

I gestori di layout di Swing sono numerosi e lelenco seguente ne riporta solo alcuni tra i
pi noti1:
BorderLayout
FlowLayout
BoxLayout
GridLayout
GridBagLayout
CardLayout
GroupLayout
SpringLayout
I gestori di layout disponibili dovrebbero essere sufficienti a creare la maggior parte delle
UI, tuttavia sempre possibile creare un layout personalizzato, anche se il compito non
banale2.
1

Maggiori dettagli sui layout: http://download.oracle.com/javase/tutorial/uiswing/layout/visual.html#card


Un esempio di layout personalizzato dal nome FormLayout:
http://www.scribd.com/doc/29332215/Esercizio7-Gui-Prenotazioni-Soluzione
2

Bocchi Cinzia

15/01/2015

Per cambiare il gestore di layout del pannello del contenuto da BorderLayout a, per
esempio, FlowLayout, sufficiente scrivere:
getContentPane().setLayout(new FlowLayout());
Posizionamento assoluto dei componenti
Talvolta pu essere utile o necessario non servirsi di un gestore di layout, per poter
collocare un componente in una posizione "assoluta". In casi come questo occorre:
1. annullare ogni gestore di layout, passando come parametro al metodo setLayout il
valore null;
2. specificare la posizione e la dimensione del componente, utilizzando il metodo
setBounds.
Il posizionamento assoluto non rappresenta, comunque, la scelta migliore poich i
componenti, in tal caso, rimangono in posizione fissa anche quando il frame viene
ridimensionato dallutente.

Pannelli generici e classe JPanel: layout di flusso


Un pannello generico usato principalmente per raggruppare i componenti (incluso altri
pannelli) da inserire in un contenitore. Per tale motivo, un pannello al tempo stesso sia
un contenitore che un componente. Il layout predefinito dei pannelli generici il layout di
flusso e la classe responsabile della sua gestione java.awt.FlowLayout.
Il layout di flusso aggiunge i componenti ad un contenitore da sinistra verso destra come
avviene per le linee di testo, ma possibile modificare lorientamento da destra verso
sinistra. Quando una linea piena, va a capo automaticamente. I componenti che si
trovano su una linea vengono centrati e occupano solo lo spazio necessario per la loro
visualizzazione.
Un pannello pu essere creato come istanza della classe javax.swing.JPanel o come
istanza di una classe derivata da JPanel.
Alcuni costruttori della classe JPanel
public JPanel()
Crea un pannello con layout di flusso.

public JPanel(LayoutManager layout)


Crea un pannello con il layout specificato.

Bocchi Cinzia

15/01/2015

Figura 5 JPanel e gerarchia di classi

Bocchi Cinzia

15/01/2015

La figura 5 mostra la gerarchia di classi coinvolte nella creazione e gestione di pannelli


generici insieme a un elenco parziale di metodi che consentono di impostarne le propriet.

La classe FlowLayout

Figura 6 La classe FlowLayout

La classe FlowLayout definisce 5 costanti intere per specificare lallineamento dei


componenti:
- public static final int CENTER;
- public static final int LEFT;
- public static final int RIGHT;
- public static final int LEADING;
- public static final int TRAILING;
Le prime 3 costanti consentono di allineare i componenti di una riga rispettivamente al
centro (default), a sinistra e a destra. Le costanti LEADING e TRAILING hanno un
significato che dipende dallorientamento definito nel contenitore:
se lorientamento LEFT_TO_RIGHT (default), determinano lo stesso effetto delle
costanti LEFT e RIGHT;
se lorientamento RIGHT_TO_LEFT, determinano un allineamento invertito, cio
rispettivamente uguale a RIGHT e LEFT.

Bocchi Cinzia

15/01/2015

La figura seguente mostra la UI di figura 1, nella quale lallineamento centrato per


impostazione predefinita, con allineamento LEFT e RIGHT.

Allineamento LEFT

Allineamento RIGHT

Figura 7 Allineamento dei componenti di contenitore con layout di flusso

La classe FlowLayout fornisce i seguenti tre costruttori:


public FlowLayout()
Crea un gestore di layout di flusso con allineamento centrato e uno spazio orizzontale e verticale
tra i componenti pari a 5 unit.

public FlowLayout(int align)


Crea un gestore di layout di flusso con lallineamento specificato e uno spazio orizzontale e
verticale tra i componenti pari a 5 unit.

public FlowLayout(int align, int hgap, int vgap)


Crea un gestore di layout di flusso con
componenti specificati.

allineamento, spazio orizzontale e verticale tra i

Tra i metodi della classe FlowLayout si evidenziano i seguenti:


public int getAlignment()
Restituisce lallineamento del layout. Il valore restituito una delle costanti definite nella classe.

public boolean getAlignOnBaseline()


Restituisce true se i componenti devono essere allineati verticalmente alla loro linea base. Il
valore di default false.

public int getHgap()


Restituisce lo spazio orizzontale tra i componenti e tra i componenti e i bordi del contenitore.

public int getVgap()


Restituisce lo spazio verticale tra i componenti e tra i componenti e i bordi del contenitore.
Bocchi Cinzia

15/01/2015

public void setAlignment(int align)


Imposta lallineamento del layout al valore specificato. Il parametro una delle costanti definite
nella classe.

public void setAlignOnBaseline(Boolean b)


Specifica se i componenti devono essere allineati verticalmente alla loro linea base. Il valore di
default false. I componenti che non possiedono una linea base vengono centrati.

public void setHgap(int hgap)


Imposta lo spazio orizzontale tra i componenti e tra i componenti e i bordi del contenitore al valore
specificato.

public void setVgap(int vgap)


Imposta lo spazio verticale tra i componenti e tra i componenti e i bordi del contenitore al valore
specificato.

Creare un pannello come istanza della classe JPanel


Prima di creare pannello occorre solo stabilire quale layout utilizzare per disporre i
componenti al suo interno. Esistono molte altre propriet definibili per i pannelli, ma
nessuna determinante in questa fase e, pertanto, le andremo a considerare in seguito.
Il layout di un pannello pu essere definito quando si crea una sua istanza, utilizzando il
costruttore con parametro LayoutManager, oppure si pu modificare con il metodo
setLayout.
Il codice seguente crea due pannelli con layout di flusso e con sfondo di diverso colore e li
aggiunge a un frame nelle aree CENTER e SOUTH.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20

import
import
import
import
import

java.awt.BorderLayout;
java.awt.Color;
java.awt.EventQueue;
javax.swing.JFrame;
javax.swing.JPanel;

@SuppressWarnings("serial")
public class MyFrameAndPanel extends JFrame {

Bocchi Cinzia

public
public
public
public

static
static
static
static

final
final
final
final

int
int
int
int

WIDTH = 450;
HEIGHT = 300;
X = 100;
Y = 100;

public MyFrameAndPanel() {
initialize();
}
15/01/2015

10

21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50

private void initialize() {


//Inizializzazione del frame
setTitle("MyFrame");
setSize(WIDTH, HEIGHT);
setLocation(X, Y);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Inizializzazione del pannello CENTER
JPanel centerPane = new JPanel();
centerPane.setBackground(Color.GRAY);
//Inizializzazione del pannello SOUTH
JPanel southPane = new JPanel();
southPane.setBackground(Color.BLACK);
//Aggiunta dei pannelli al frame
getContentPane().add(centerPane, BorderLayout.CENTER);
getContentPane().add(southPane, BorderLayout.SOUTH);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
MyFrameAndPanel frame = new MyFrameAndPanel();
frame.setVisible(true);
}
});
}
}
MyFrameAndPanel

righi 27-29
Viene creato il pannello centerPane come istanza di JPanel e viene impostato il colore di
sfondo a Color.GRAY.
righi 30-32
Viene creato il pannello southPane come istanza di JPanel e viene impostato il colore di
sfondo a Color.BLACK.
righi 34-36
I due pannelli vengono aggiunti al pannello del contenuto del frame nelle aree desiderate.
Il frame generato ha laspetto mostrato in figura 8.

Bocchi Cinzia

15/01/2015

11

Figura 8 Il frame generato dal codice MyFrameAndPanel

Creare un pannello come istanza di una classe derivata da JPanel


Un pannello pu essere creato come istanza di una classe derivata da JPanel. Tale scelta
pu essere motivata dalla necessit di definire un contenitore da riutilizzare pi volte in
diversi frame.
Come esempio viene mostrata una classe che definisce un pannello con le seguenti
propriet:
layout di flusso con allineamento dei componenti a sinistra;
sfondo grigio chiaro;
colore del testo grigio scuro;
cursore a forma di mano;
font Verdana 12 punti.
I metodi coinvolti nellimpostazione di tali propriet sono riassunti nella seguente tabella,
ad eccezione di quelli gi illustrati in precedenza.
Classe
java.awt.Component

Metodo
public Color getBackground()
Restituisce il colore di sfondo del componente.

java.awt.Component

public Cursor getCursor()


Restituisce il cursore impostato per il componente. La classe
Cursor incapsula numerose tipologie di cursori, definendo
apposite costanti intere. Per il momento, consideriamo solo le
seguenti:
CROSSHAIR_CURSOR il mirino,
DEFAULT_CURSOR il cursore predefinito del sistema,
HAND_CURSOR la manina,
TEXT_CURSOR il cursore per il testo,
WAIT_CURSOR il cursore per lattesa.
Se il componente non ha un cursore impostato, viene restituito
quello del genitore. Nel caso non sia impostato alcun cursore

Bocchi Cinzia

15/01/2015

12

nellintera gerarchia, viene restituito il DEFAULT_CURSOR.

java.awt.Component

public Font getFont()


Restituisce il font impostato per il componente. Se nessun font
stato impostato, viene restituito il font dei componenti genitori.

java.awt.Component

public Color getForeground()


Restituisce il colore di primo piano del componente.

java.awt.Container

public LayoutManager getLayout()


Restituisce il gestore di layout del componente.

javax.swing.JComponent public void setBackground(Color bgColor)


Imposta il colore di sfondo del componente a quello specificato. Il
colore viene applicato solo se il componente opaco.

java.awt.Component

public void setCursor(Cursor cursor)


Imposta il cursore del componente a quello specificato. Per
creare un cursore da passare come parametro a tale metodo
occorre scrivere:
component.setCursor(Cursor.getPredefinedCursor(
Cursor.TYPE));
dove component il componente al quale applicare la propriet e
TYPE uno dei tipi di cursore definiti nella classe Cursor.

javax.swing.JComponent public void setForeground(Color fgColor)


Imposta il colore di primo piano del componente.

javax.swing.JComponent public void setFont(Font font)


Imposta il font del componente a quello specificato. Occorre
scrivere:
component.setFont(new Font(fontFamily, style, size));

Il codice che definisce il pannello personalizzato il seguente:


01
02
03
04
05
06
07
08
09
10
11
12
13
14
15

import
import
import
import
import

java.awt.Color;
java.awt.Cursor;
java.awt.FlowLayout;
java.awt.Font;
javax.swing.JPanel;

@SuppressWarnings("serial")
public class MyPanel extends JPanel {
public MyPanel() {
//Crea il pannello con layout di flusso e allineamento a
sinistra
super(new FlowLayout(FlowLayout.LEFT));
//Imposta il colore di sfondo a grigio chiaro
setBackground(Color.LIGHT_GRAY);

Bocchi Cinzia

15/01/2015

13

16
17
18
19
20
21
22
23
24

//Imposta il colore del testo a grigio scuro


setForeground(Color.DARK_GRAY);
//Imposta il cursore a forma di mano
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
//Imposta il font a Verdana 12 punti
setFont(new Font("Verdana", Font.PLAIN, 12));
}
}
MyPanel versione 1

Una versione leggermente diversa del codice prevede lutilizzo di un metodo privato
initialize per inizializzare il pannello. In tale caso non sar pi possibile utilizzare la
chiamata esplicita al costruttore di JPanel, effettuata con super, e si dovr ottenere il
riferimento al gestore di layout per modificare lallineamento. Vediamo le modifiche
apportate al codice.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

import
import
import
import

java.awt.Color;
java.awt.Cursor;
java.awt.FlowLayout;
java.awt.Font;

import javax.swing.JPanel;
@SuppressWarnings("serial")
public class MyPanel extends JPanel {
public MyPanel() {
initialize();
}
private void initialize() {
//Imposta l'allineamento a sinistra
((FlowLayout) getLayout()).setAlignment(FlowLayout.LEFT);
//Imposta il colore di sfondo a grigio chiaro
setBackground(Color.LIGHT_GRAY);
//Imposta il colore del testo a grigio scuro
setForeground(Color.DARK_GRAY);
//Imposta il cursore a forma di mano
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
//Imposta il font a Verdana 12 punti
setFont(new Font("Verdana", Font.PLAIN, 12));
}
}
MyPanel versione 2

Bocchi Cinzia

15/01/2015

14

rigo 19
Il metodo getLayout restituisce il riferimento al gestore di layout del pannello. Il
riferimento, per, di tipo LayoutManager e, di conseguenza, occorre convertirlo nel tipo
FlowLayout effettuando lopportuno cast. Sul riferimento cos ottenuto viene poi invocato il
metodo setAlignment per impostare lallineamento a sinistra.
Consideriamo ora il codice della classe MyFrame versione 53.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

import java.awt.EventQueue;
import javax.swing.JFrame;
@SuppressWarnings("serial")
public class MyFrame extends JFrame {
public
public
public
public

static
static
static
static

final
final
final
final

int
int
int
int

WIDTH = 450;
HEIGHT = 300;
X = 100;
Y = 100;

public MyFrame() {
initialize();
}
private void initialize() {
setTitle("MyFrame");
setSize(WIDTH, HEIGHT);
setLocation(X, Y);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
MyFrame frame = new MyFrame();
frame.setVisible(true);
}
});
}
}
MyFrame versione 5

Indipendentemente dalla versione di MyPanel scelta, per aggiungere il pannello al frame


conviene definire una variabile di istanza di tipo MyPanel nella classe MyFrame, piuttosto
che definire listanza di MyPanel come variabile locale al metodo initialize. Definendo
una variabile di istanza si avr a disposizione il riferimento al pannello e si potr accedere
ai suoi componenti ogni volta che ce ne sar bisogno.
3

Si veda la dispensa https://www.scribd.com/doc/252750274/01-Java-Swing-Creare-Finestre-Top-Level

Bocchi Cinzia

15/01/2015

15

Il codice seguente mostra come aggiungere il pannello MyPanel al frame MyFrame


versione 5.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

import
import
import
import

java.awt.BorderLayout;
java.awt.EventQueue;
javax.swing.JFrame;
panel2.MyPanel;

@SuppressWarnings("serial")
public class MyFrame extends JFrame {
public
public
public
public

static
static
static
static

final
final
final
final

int
int
int
int

WIDTH = 450;
HEIGHT = 300;
X = 100;
Y = 100;

private MyPanel centerPane;


public MyFrame() {
initialize();
}
private void initialize() {
//Inizializzazione del frame
setTitle("MyFrame");
setSize(WIDTH, HEIGHT);
setLocation(X, Y);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Creazione del pannello
centerPane = new MyPanel();
//Aggiunta del pannello al frame
getContentPane().add(centerPane, BorderLayout.CENTER);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
MyFrame frame = new MyFrame();
frame.setVisible(true);
}
});
}
}
MyFrame versione 6

Il codice produce la UI di figura 9.


Bocchi Cinzia

15/01/2015

16

Figura 9 La UI generata dal codice MyFrame versione 6

Pannelli con Window Builder


La creazione di un pannello con le propriet specificate in precedenza diventa
unoperazione semplice e veloce se si usa Window Builder. Sia MyFrame la classe creata
con Window Builder. Vediamo quali sono le azioni da svolgere per ottenere il frame di
figura 9.
1) Aggiunta del pannello al frame
Si seleziona JPanel dalla Palette e si aggiunge il componente allarea centrale del
pannello del contenuto.

Figura 10 Aggiunta di un pannello allarea CENTER del pannello del contenuto

Bocchi Cinzia

15/01/2015

17

2) Impostazione del Layout di flusso con allineamento a sinistra


Dopo aver selezionato il pannello, nella finestra delle propriet si espande Layout e si
imposta alignment a LEFT.

LEFT

Figura 11 Modifica dellallineamento del gestore di layout

3) Impostazione dei colori di sfondo e primo piano


Nella finestra delle propriet si imposta background a LIGHT_GRAY e foreground a
DARK_GRAY.

LIGHT_GRAY
DARK_GRAY

Figura 12 Modifica dei colori di sfondo e di primo piano

Bocchi Cinzia

15/01/2015

18

4) Impostazione del cursore e del font


Nella finestra delle propriet si preme il pulsante che mostra le impostazioni avanzate e,
successivamente, si modifica cursor a HAND_CURSOR e font a Verdana, PLAIN, 12.
Pulsante per visualizzare
le impostazioni avanzate
HAND_CURSOR

Verdana, PLAIN, 12

Figura 13 Impostazione del cursore e del font

Il codice generato automaticamente da Window Builder il seguente:


01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

import
import
import
import
import
import
import
import

java.awt.EventQueue;
javax.swing.JFrame;
javax.swing.JPanel;
java.awt.BorderLayout;
java.awt.FlowLayout;
java.awt.Color;
java.awt.Cursor;
java.awt.Font;

public class MyFrame {

Bocchi Cinzia

private JFrame frame;


/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
MyFrame window = new MyFrame();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
15/01/2015

19

29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56

/**
* Create the application.
*/
public MyFrame() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.setFont(new Font("Verdana", Font.PLAIN, 12));
panel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CUR
SOR));
panel.setForeground(Color.DARK_GRAY);
panel.setBackground(Color.LIGHT_GRAY);
FlowLayout flowLayout = (FlowLayout) panel.getLayout();
flowLayout.setAlignment(FlowLayout.LEFT);
frame.getContentPane().add(panel, BorderLayout.CENTER);
}
}
MyFrame con pannello centrale versione Window Builder

Quest'opera distribuita con Licenza Creative Commons Attribuzione - Condividi allo stesso modo 4.0
Internazionale

Bocchi Cinzia

15/01/2015

20