NOTA! Questo sito utilizza i cookie e tecnologie simili.

Se non si modificano le impostazioni del browser, l'utente accetta. Per saperne di piu'

Approvo

Guida Java 2D - Capitolo 39: I layout (seconda parte, pratica).

 

 

JFrameIn questo capitolo è presente il codice di una classe eseguibile che, una volta avviata, mostrerà a video un JFrame contenente diversi JPanel e pulsanti JButton, disposti in maniera particolare, al fine di mostrare il comportamento di tre gestori di layout: BorderLayout, GridLayout, FlowLayout.

 

 

Il JFrame ha layout BorderLayout: la superficie viene suddivisa in zone particolari (i lati e il centro, identificati con le costanti predefinite NORTH, WEST, EAST, SOUTH, CENTER) che il gestore del layout provvederà a ridimensionare in base alle esigenze (al tipo e alla quantità di elementi che inseriremo all'interno di ogni zona); all'inizio, la zona centrale occuperà la maggior parte della superficie, mentre alle porzioni laterali verrà lasciato uno spazio minimo.

 

Verranno quindi inseriti, nel JFrame, 5 pannelli, ciascuno in una zona diversa.

 

 

 

Il pannello centrale avrà layout FlowLayout: gli elementi verranno inseriti da sinistra a destra, riga per riga (il gestore passerà automaticamente alla riga successiva dopo aver esaurito lo spazio disponibile su quella corrente).

 

All'interno di tale pannello verranno inseriti altri due JPanel, disposti quindi uno di fianco all'altro (secondo le direttive del FlowLayout), inizialmente vuoti e, per questo, con dimensioni minime, che verranno riadattate all'inserimento di componenti al loro interno.

 

Il 'sottopannello' (un JPanel) di sinistra avrà layout FlowLayout.

 

Vi inseriremo 4 pulsanti JButton, che verranno disposti secondo le logiche precedentemente esposte del FlowLayout.

 

Il sottopannello di destra avrà, invece, layout GridLayout, che divide la superficie a disposizione in 'righeXcolonne' celle rettangolari di dimensioni uguali.

 

Gli elementi verranno inseriti occupando le celle una per una, da sinistra verso destra, riga per riga.

 

Avviate la classe ProvaLayout per vedere l'aspetto iniziale del frame così composto, dopodichè ridimensionate la finestra dell'applicazione per vedere come il gestore di layout FlowLayout cambierà la disposizione degli elementi (ad esempio, portandoli 'a capo') a seconda delle situazioni.

 

import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;


public class ProvaLayout extends JFrame
{
private JPanel pannello1, pannello2, pannello3, pannello4, pannello5;
private JPanel subPannello1, subPannello2;
private Border bordo1, bordo2, bordo3, bordo4, bordo5;
private JButton pulsante1, pulsante2, pulsante3, pulsante4, pulsante5, pulsante6, pulsante7, pulsante8;


public ProvaLayout()
{
this.setTitle("JFrame con 5 pannelli dotati di bordi colorati; BorderLayout.");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Toolkit mioToolkit = Toolkit.getDefaultToolkit();
Dimension dimensioniSchermo = mioToolkit.getScreenSize();

int larghezzaFrame, altezzaFrame;
larghezzaFrame = (int) (dimensioniSchermo.getWidth()/2);
altezzaFrame = (int) (dimensioniSchermo.getHeight()/2);

this.setSize(larghezzaFrame, altezzaFrame);

// NOTA IMPORTANTE: l'origine del sistema di riferimento dello schermo (punto (0,0)) è situata IN ALTO A SINISTRA; valori y positivi 'scendendo', x positivi proseguendo 'verso destra'.
this.setLocation(((int)dimensioniSchermo.getWidth()/4), ((int)dimensioniSchermo.getHeight()/4));

// Istanzio i pannelli
pannello1 = new JPanel();
pannello2 = new JPanel();
pannello3 = new JPanel();
pannello4 = new JPanel();
pannello5 = new JPanel();

// Istanzio i bordi colorati, di tipo "Line Border" con spessore di bordo 5
bordo1 = BorderFactory.createLineBorder(Color.red, 5);
bordo2 = BorderFactory.createLineBorder(Color.yellow, 5);
bordo3 = BorderFactory.createLineBorder(Color.green, 5);
bordo4 = BorderFactory.createLineBorder(Color.magenta, 5);
bordo5 = BorderFactory.createLineBorder(Color.cyan, 5);

// Imposto i bordi colorati per i pannelli
pannello1.setBorder(bordo1);
pannello2.setBorder(bordo2);
pannello3.setBorder(bordo3);
pannello4.setBorder(bordo4);
pannello5.setBorder(bordo4);

// Layout del Frame
Container contentPane = this.getContentPane();
contentPane.setLayout(new BorderLayout());
contentPane.add(pannello1, BorderLayout.NORTH);
contentPane.add(pannello2, BorderLayout.SOUTH);
contentPane.add(pannello3, BorderLayout.EAST);
contentPane.add(pannello4, BorderLayout.WEST);
contentPane.add(pannello5, BorderLayout.CENTER);

// Imposto, come layout del pannello centrale (pannello5), il FlowLayout, e vi inserisco due sottopannelli...
pannello5.setLayout(new FlowLayout());
subPannello1 = new JPanel();
subPannello2 = new JPanel();
subPannello1.setBorder(bordo3);
subPannello2.setBorder(bordo4);
pannello5.add(subPannello1);
pannello5.add(subPannello2);

// Imposto, come layout di subPannello1, il FlowLayout, mentre per subPannello2 utilizzerò un GridLayout 2x2
subPannello1.setLayout(new FlowLayout());
subPannello2.setLayout(new GridLayout(2,2));

// All'interno di ciascun sottopannello inserisco 4 pulsanti JButton...
pulsante1 = new JButton("Pulsante 1");
pulsante2 = new JButton("Pulsante 2");
pulsante3 = new JButton("Pulsante 3");
pulsante4 = new JButton("Pulsante 4");
pulsante5 = new JButton("Pulsante 5");
pulsante6 = new JButton("Pulsante 6");
pulsante7 = new JButton("Pulsante 7");
pulsante8 = new JButton("Pulsante 8");

subPannello1.add(pulsante1);
subPannello1.add(pulsante2);
subPannello1.add(pulsante3);
subPannello1.add(pulsante4);
subPannello2.add(pulsante5);
subPannello2.add(pulsante6);
subPannello2.add(pulsante7);
subPannello2.add(pulsante8);
}


public static void main(String[] args)
{
ProvaLayout pl = new ProvaLayout();
pl.setVisible(true);
}
}

 

 
Vai all'inizio della pagina