PDA

View Full Version : [Java] Creazione array di checkbox, gli actionperformed?


abestos
18-02-2010, 10:35
ciao, ho creato un array di 31 check box che sono allineate ad un array di 31 label. Ogni volta che si spunta una check box la label corrispondente dovrebbe essere cancellata. Dal momento che ho un array come faccio a definire gli actionPerformed? posso definirne uno che che vale per tutti o devo definirne 31?
Il mio problema è solo creare il metodo, visto che normalmente si mette il nome dell'istanza+actionPerformed oppure dall'interfaccia grafica di netbeans (non posso farlo dall'interfaccia grafica con le checkbox perchè non posso crare un array ma dovrei creare 31 checkbox).

banryu79
18-02-2010, 11:18
Se non ho capito male quello che vuoi fare, puoi creare una singola implementazione di ActionListener, che assegnerai come unico ascoltatore a ciascuna checkbox.

Poi, nel metodo actionPerformed del tuo ascoltatore, sull'oggetto ActionEvent che viene passato al metodo come parametro invochi il metodo getSource() per ottenere il riferimento all'oggetto (la checkBox) che ha scatenato l'evento: scoperta la checkbox, sai anche a quale label è associata, e la cancelli.

per darti uno spunto:

JCheckBox checboxes[];
JLabel labels[];
...
// creazione listener
ActionListener l = new ActionListener() {
public void actionPerformed(ActionEvent e) {
int index = 0;
for (JCheckBox c : checkboxes) {
if (e.getSource() == c) {
break;
}
index++;
}

// la sorgente e' la checkbox di indice index:
// in base al valore della property "selected" della checkbox
// mostro/nascondo labels[index]
}
};

// registrazione listener
for (JCheckBox c : checkboxes) {
c.addActionListener(l);
}

abestos
18-02-2010, 11:58
grazie provo subito :)

abestos
18-02-2010, 15:50
Grazie ho risolto! Ho due altri dubbi però:

1- Come faccio ad associare un tasto della tastiera ad un pulsante=? in poche parole vorrei che se si preve Enter venga premuto il pulsante.

2- Io uso 1280x1024 di risoluzione sul mio schermo e quindi la mia applicazione che è circa 400x800 si vede perfettamente. Ma se la uso a risoluzione più bassa ovviamente non è contenuta interamente nello schermo. Mi chiedevo se c'era un modo per ridimensionare la finestra scalando in proporzione ogni oggetto contenuto (pulsanti, label, checkbox...)

Grazie del prezioso aiuto :)

banryu79
19-02-2010, 08:40
1- Come faccio ad associare un tasto della tastiera ad un pulsante=? in poche parole vorrei che se si preve Enter venga premuto il pulsante.

Ci sono due modi per farlo: o tramite "key bindings" o tramite key listener.
Ti posto questo link dei Java Tutorials:
- How to Use Key Bindings (http://java.sun.com/docs/books/tutorial/uiswing/misc/keybinding.html)


2- Io uso 1280x1024 di risoluzione sul mio schermo e quindi la mia applicazione che è circa 400x800 si vede perfettamente. Ma se la uso a risoluzione più bassa ovviamente non è contenuta interamente nello schermo. Mi chiedevo se c'era un modo per ridimensionare la finestra...

Potresti recuperare il default Toolkit per ottenere le dimensioni dello schermo del sistema in cui sta girando la jvm che ha mandato in esecuzione il tuo programma; a quel punto, sapendo altezza e larghezza dello schermo ti è possibile decidere che dimensioni assegnare alla tua finestra:

import java.awt.Dimension;
import java.awt.Toolkit;
...
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
// screen.heigth e screen.width contengono rispettivamente
// altezza e larghezza dello schermo.



...scalando in proporzione ogni oggetto contenuto (pulsanti, label, checkbox...)

Questo l'ho quotato a parte, perchè i vari component interni ad una finestra, di solito, non si "scalano" a mano in base alla larghezza dello schermo e quindi della finestra, assegnando direttamente loro delle dimensioni/posizioni.

Per questo compito ci sono i vari LayoutManagers che implementano differenti politiche di assegnazione degli spazi interni di un container ai vari component contenuti, secondo precise logiche di posizionamento e ridimensionamento dei component.

Per non fare un discorso troppo astratto, prova a descrivere il layout della finestra principale del tuo programma, così cerchiamo di capire assieme quali strategie di suddivisione dello spazio applicare.