venerdì 9 ottobre 2009

LAYOUT



-BORDER LAYOUT-


JPanel p1=new JPanel();


p1.add(NOMEOGGETTO, "North");
(aggiunge un oggetto in posizione Nord.)
Possibili posizioni: North, South, West, East, Center
esempi
c.add(new JPanel(),"North" );
c.add(new JPanel(),"Center");
c.add(new JPanel(),"East");
c.add(new JPanel(),"West");
c.add(new JPanel(),"South");

E' IL LAYOUT DI BASE DI CONTENTPANE



-GRID LAYOUT-







import javax.swing.*;
import java.awt.*;
public class Finestra extends JFrame{
public Finestra(){
setSize(300, 300); --> (imposta dimensione)
setTitle("Finestra"); --> (imposta titolo)
setDefaultCloseOperation(EXIT_ON_CLOSE); --> (imposta la chiusura predefinita dell'applicazione)
Container sfondo=getContentPane(); --> (inserisce lo sfondo ke poi conterrà il pannello)
JPanel pannello=new JPanel(); --> (crea il pannello)
pannello.setLayout(new GridLayout(3, 2)); --> (imposta il num. di righe e colonne del pannello)
pannello.add(new JButton("uno")); --> (aggiunge un pulsante al pannello)
pannello.add(new JButton("due"));
pannello.add(new JButton("tre"));
pannello.add(new JButton("quattro"));
pannello.add(new JButton("cinque"));
pannello.add(new JButton("sei"));
sfondo.add(pannello); --> (una volta creato il pannello,viene sovrapposto allo sfondo)
setVisible(true);}}

setLayout(null) e setBounds()

IL LAYOUT null
Ci sono circostanze nelle quali i layout BorderLayout e GridLayout non permettono di ottenere la disposizione progettata.
In questo caso disporremo i nostri elementi senza ricorrere ad alcun layout.
Useremo un JPanel sul quale avremo invocato in precedenza il metodo setLayout con parametro null.


iL METODO setBounds()
Serve per disporre un elemento in assenza di layout e ne stabilisce le dimensioni..
setBounds(posizioneOrizzontale, posizioneVerticale, larghezza, altezza);

setPreferredSize() e pack()

RICORDA:
1 POSSO DECIDERE SE USARE setSize() o setPreferredSize()
2 SE USO setPreferredSize() uso per forza pack()



import javax.swing.*;
import java.awt.*;
public class dimensioniPannelli {
/** * Creates a new instance of dimensioniPannelli.
*/ public dimensioniPannelli() { }
/** * @param args the command line arguments
*/ public static void main(String[] args)
{
JFrame f = new JFrame();
//f.setSize(300,400);
// che cosa imparate da questo pezzo di codice????
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
String[] s = ge.getAvailableFontFamilyNames();
// for(String nomeFont: s)System.out.println(nomeFont);
JPanel p1,p2;
p1 = new JPanel();p2 = new JPanel();
// ha senso con l'uso di pack in jframe
p1.setPreferredSize(new Dimension(200,200));
p2.setPreferredSize(new Dimension(200,200));
p1.setBackground(Color.red);
Container c = f.getContentPane();
c.add(p1,"North");
c.add(p2,"South");
p1.setLayout(new GridLayout(1,2));
p1.add(new JLabel("etichetta di prova"));
JTextField testo = new JTextField("Luigi");
testo.setColumns(10);
testo.setFont(new Font(s[2], 3, 24));
p1.add(testo);
// ha senso con l'uso di setPreferredSize negli oggetti contenuti
f.pack();
f.setVisible(true); }}

FONT

Costruttore: Font(String nome Font, int stile, int dimensione Carattere)

*
Come primo parametro si può specificare una delle seguenti caratteristiche:
  • “Serif”: con grazie;
  • “SansSerif”: senza grazie;
  • “Monospaced”: equispaziato.



*Valori predefiniti per lo stile:
  • Font.PLAIN: normale;
  • Font.BOLD: grassetto;
  • Font.ITALIC: corsivo.

STAMPARE I CARATTERI DISPONIBILI PER I FONT.

..GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment();

String[] s=ge.getAvailableFontFamilyNames();

for(String nomeFont: s) System.out.println(nomeFont);...

COMPONENTI STANDARD- CLASSE JTEXTFIELD

METODI UTILI PER LE CASELLE DI TESTO
Costruttore:
  • JTextField(String testo, int colonne) imposta il testo iniziale e il numero delle colonne (una colonna per carattere) della casella di testo
  • JTextField( int colonne)
  • JTextField( string testo)
  • JTextField( )

Altri metodi


  • Void setText(String testo) imposta il testo nella casella di testo

  • String getText() recupera il testo presente nella casella di testo

  • Void setEditable(true/false) permette oppure no di modificare il testo presente nella casella di testo durante l'esecuzione

  • Void setHorizontalAlignment(Swing Constants.RIGHT/CENTER/LEFT)stabilisce se il testo sarà allineato a detra,centro o sinistra

  • Void setFont (Font) imposta il tipo di carattere utilizzato nella casella di testo; come parametro, vedere LA CLASSE FONT.

ESERCIZIO CASELLA DI TESTO

JTEXTFIELD (CASELLA DI TESTO)
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Finestra extends JFrame{
private JTextField casella1;
private JTextField casella2;
private int somma=0;
public Finestra(){setSize(400, 200);
setTitle("Finestra");
casella1=new JTextField();
casella1.add ActionListener(new GestoreCasella());
casella2=new JTextField();casella2.setEditable(false);
Container sfondo=getContentPane();sfondo.add(casella1, "North");
sfondo.add(casella2, "South");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);}}
import javax.swing.*;
import java.awt.*;i
mport java.awt.event.*;
import javax.swing.JPanel;
import javax.swing.BorderFactory;
import javax.swing.border.EtchedBorder;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
public class GuiExp { public static void main(String[] args) {
// creare una finestra
JFrame f = new JFrame("titolo della finestra");
// impostiamo le dimensioni della finestra
f.setSize(200,200);
// impostiamo la chiusura del programma alla chiusura della finestra f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// COME SUDDIVIDERE LA FINESTRA?
// Usando il contentPane!!!
Container sfondoTrasparente = f.getContentPane();
sfondoTrasparente.setLayout(new GridLayout(2,1));
// creiamo un paio di pannelli di colore di sfondo diverso da collocare sullo
// sfondoTrasparente
JPanel pannelloSuperiore = new JPanel();
pannelloSuperiore.setSize(200,200);
pannelloSuperiore.setBackground(Color.yellow);
// aggiungo il mio pannelloSuperiore allo sfondoTrasparente in posizione Center sfondoTrasparente.add(pannelloSuperiore);
JPanel pannelloInferiore = new JPanel();
pannelloInferiore.setSize(200,200);
pannelloInferiore.setBackground(Color.red);
// aggiungo il mio pannelloSuperiore allo sfondoTrasparente in posizione Center sfondoTrasparente.add(pannelloInferiore);
// visualizziamo la finestra
f.setVisible(true); }}

COMPONENTI STANDARD- CLASSE BUTTON

Button significa pulsante esso rappresenta un semplice componente che avvia ad una determinata azione quando vengono premuti.

metodi costruttore
Button(); pulsante vuoto senza etichetta
Button(String); pulsante con etichetta

altri metodi
  • String getLabel(); serve ad ottenere il valore del'etichetta
  • setLabel(string ); serve ad impostare il valore dell'etichetta

COMPONENTI STANDARD-LA CLASSE JLABEL

Label significa etichetta e consiste in una stringa di testo utilizzata per etichettare altri componenti, ovvero per assegnare loro una descrizione visibile nella GUI

metodi costruttori:
  • JLabel() Crea un etichetta vuota con testo allineato a sinistra
  • JLabel("titolo") crea un etichetta con il testo specificato tra parentesi e allineamento a sinistra
  • JLabel("titolo", allineamento) Crea un etichetta con testo e allineamento specificato

ALLINEAMENTO: Label.RIGHT o 0 - Label.LEFT o 1 - Label.CENTER o 2

Altri metodi:

  • String getText() restituisce una stringa contenente il testo dell'etichetta
  • setText(string) modifica il testo dell'etichetta
  • int getAlignement(); restituisce un int che indica all'ineamento
  • int setAlignement(Allineamento) modifica all'ineamento

ESERCIZIO DI REPILOGO

Parte di un esercizio per ripassare quanto affermato nei post precedenti( classe JFrame,
JPanel, inserimento oggetti,..)
......
// 1 una jframe è una finestra
// 2 l'argomento del cotruttore è il titolo della finestra

JFrame f = new JFrame("Swing Paint Demo");
// 3 si stabilisce cosa debba fare il programma quando si clicca sulla finestra
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// creo due oggetti di classe mypanel
// un pannello è un contenitore

JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
// 4 per aggiungere pannelli ad una finestra ho bisogno di prendere il suo pannello (pane) del contenuto (content)
Container c = f.getContentPane();
c.add(p1);
c.add(p2);f.setSize(800,400);
f.setVisible(true);

INSERIMENTO DI OGGETTI

COME FACCIO A INSERIRE UN OGGETTO ALL'INTERNO DI UN CONTENITORE?
Per inserire un oggetto, componente o contenitore, all'interno di un contenitore devo utilizzare il metodo:

  • oggettoContenitore.add(oggettoDaAggiungere);

Usero' il metodo add() per aggiungere ad esempio un pulsante ad un pannello, un panello ad una finestra, una finestra ad una finestra,...

  • Container c = oggettoClasseJFrame.getContentPane();

Creo il contenitore di pannelli, che mi permetti di aggiungere alla finesra i pannelli

LA CLASSE JPanel

Un pannello è la forma più semplice di costruttore e può essere creato utilizzando il metodo costruttore:
  • JPanel();

Ci sono molti metodi che possiamo utilizzare:

  • setBackground(Color.RED); imposta il colore di sfondo del pannello
  • setBorder(new EtchedBorder(Color.RED , Color.WHITE)); Imposta bordo doppio colore
  • setBorder(new LineBorder(Color.RED , 5)); Imposta il colore e lo spessore del bordo

LA CLASSE JFrame

Metodi costruttori:
  • JFrame(); Crea una finestra senza titolo
  • JFrame( "titolo"); Crea una finestra con il titolo

Altri metodi:

  • setSize(larghezza, altezza); Modifica le dimensioni della finestra
  • setLocation(x,y); Stabilisce la posizione della finestra che altrimenti è posta in posizione (0;0)
  • setResizable(true); Rende ridimensionabile la finestra che per default non lo sono
  • setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Imposta la chiusura della finestra
  • setVisible(true); Rende la finestra visibile