Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Elementi fondamentali:
• Componenti e composizione: l’interfaccia grafica viene
costruita assemblando componenti pronti, quali finestre,
bottoni, caselle di testo;
Componenti
Pannello Secondo
(contenitore) pannello
Osservazioni:
• Componenti: la finestra mostra vari componenti, quali
etichette (nome, descrizione), caselle di testo, bottoni, liste a
discesa, radio e check buttons, liste, e pannelli, ovvero
generici contenitori di altri componenti (decorati con un
bordo e un titolo)
• Composizione: la finestra contiene un pannello, che contiene
dei componenti, ma anche un secondo pannello, il quale
contiene a sua volta dei bottoni;
Y
Il dimensionamento e il posizionamento fisso in pixel non sono
però affidabili: se si cambia la dimensione o il tipo dei font o la
risoluzione del video, o si cerca di ridimensionare la finestra, si
possono ottenere componeti sovrapposti, mal distribuiti, o
posizionati fuori dall’area visibile.
Semantici
Bottone 1 E1 Ascoltatore1
E1
Bottone 2 E2 Ascoltatore2
ESEMPIO
public FirstExample() {
// costruzione e configurazione componenti
bottone = new JButton("Premi qui");
testo = new JTextField();
testo.setColumns(20);
// dichiarato in ActionListener
// verrà invocato quando il bottone sarà premuto
public void actionPerformed(ActionEvent event) {
Date ora = new Date();
testo.setText(ora.toString());
frame.setVisible(true);
// la main termina, ma il programma no!!!
}
}
Object
Component
AWT
Container Swing
Window JComponent
JTextField
AbstractButton
JTextArea
JToggleButton JButton
JCheckBox JRadioButton
Osservazioni:
• ogni componente grafico è rappresentato da una classe.
• i componenti sono disposti lungo una gerarchia di
ereditarietà i metodi presenti nelle classi base sono
disponibili in tutte le sottoclassi!
• Nell’ovale sono riportate le classi che rappresentano le
finestre. Di due tipi, normale (JFrame), di dialogo (usata di
norma per chiedere all’utente informazioni).
Object
EventObject
AWTEvent
Container
E’ un contenitore di altri componenti. Pertanto:
• esistatono metodi per aggiungere/rimuovere i componenti
contenuti, e per ispezionare quali componenti sono presenti;
• è possibile associare un layout manager
import javax.swing.*;
import java.awt.*;
JPanel
Pensato per essere un semplice contenitore di componenti. Non ha
nessuna differenza particolare, a meno che il look and feel non
imponga qualche differenza estetica (ad esempio, uno sfondo
grafico).
JLabel
Semplice etichetta di testo.
Attenzione: JLabel non è passivo, ha tutta la gamma di eventi
ereditati dai suoi padri, come ad esempio la gestine degli eventi
del mouse, presente sin dalla radice della gerarchia, Container.
Ad esempio:
public RadioSample() {
// crea e configura i componenti
rbtUno = new JRadioButton("Uno");
rbtUno.setSelected(true);
rbtDue = new JRadioButton("Due");
rbtTre = new JRadioButton("Tre");
label = new JLabel("Seleziona un bottone");
// aggiungi i componenti
add(rbtUno); add(rbtDue); add(rbtTre);
add(label);
JTextField e JTextArea
Entrambi i componenti espongono la proprietà text che
consente di leggere/impostare il testo contenuto.
public TextSample() {
// crea e configura i componenti
testo = new JTextField("Campo di testo");
testo.setColumns(20);
btnAggiungi = new JButton("Aggiungi testo");
area = new JTextArea("TextArea");
area.setLineWrap(true);
area.setWrapStyleWord(true);
scroll = new JScrollPane(area);
scroll.setPreferredSize(
new Dimension(300, 200));
// aggiungi i componenti
add(testo);
add(btnAggiungi);
add(scroll);
// gestione eventi
btnAggiungi.addActionListener(this);
}
0 1 0
0 1 0
0 1 0
gb.add(new JLabel(“Etichetta”));
gb.add(new JTextFiled(“Prova”));
gb.add(new Jlabel(“Etichetta2”));
gb.add(new JLabel(“Ciao”)).
0 1
0
0
0
gb.add(new JLabel("Modulo di
registrazione")).gridSize(2, 1);
gb.newLine(); // attenzione!
gb.add(new JLabel("Nome")).west();
gb.add(new JTextField()).fillHorizontal();
gb.add(new JLabel("Età")).west();
gb.add(new JTextField(3)).west();
gb.add(new JLabel("Commento")).northWest();
JscrollPane scroll = new JScrollPane(
new JTextArea());
gb.add(scroll).fillBoth();
dataPanel (GridBagLayout)
buttonPanel (FlowLayout,
destra)
Principale (BorderLayout)
public MultiLayout() {
JPanel dataPanel = new JPanel();
txfName = new JTextField();
txfName.setColumns(20);
txfSurname = new JTextField();
txfSurname.setColumns(20);
txfAge = new JTextField();
txfAge.setColumns(3);
GridBuilder builder =
new GridBuilder(dataPanel,
new double[] {0,0,0, 1},
new double[] {0,1}, 3);
builder.add(new JLabel("Nome")).west();
builder.add(txfName).fillHorizontal();
builder.add(new JLabel("Cognome")).west();
builder.add(txfSurname).fillHorizontal();
builder.add(new JLabel("Età")).west();
builder.add(txfAge).west();
setLayout(new BorderLayout());
add(dataPanel, BorderLayout.CENTER);
add(buttonPanel, BorderLayout.SOUTH);
}
}
g.setColor(Color.GREEN);
g.fillRoundRect(80, 160, 40, 40, 10, 5);
g.setColor(Color.BLUE);
g.drawArc(20, 20, 160, 160, 90, 270);
g.drawLine(20, 100, 100, 100);
g.drawLine(100, 20, 100, 180);
g.drawRect(10, 90, 20, 20);
g.setColor(Color.BLACK);
g.setFont(new Font("Arial", Font.BOLD, 12));
g.drawString("Testo libero!", 140, 80);
}
public DialogSample() {
check = new JCheckBox("Prova la selezione");
JButton btnSeleziona = new jButton("Seleziona");
add(btnSeleziona);
add(check);
btnSeleziona.addActionListener(this);
}
if(dialog.risposta) {
check.setSelected(true);
check.setText("Hai risposto si");
} else {
check.setSelected(false);
check.setText("Hai risposto no");
}
}
buttons.add(label);
buttons.add(btnSi);
buttons.add(btnNo);
setContentPane(buttons);
pack();
btnSi.addActionListener(this);
btnNo.addActionListener(this);
}