View Full Version : [java]eventi multipli su un JButton
Salve ,scrivo questo post per chiedere sommessamente a chi di java è un maestro una cosa.
Siccome ho impostato su un Jbutton un ricevitore di eventi che richiama una funzioneactionperformed che svolge diversi compiti,esempio inizializza un array,cambia alcune variabili booleane etc...
solo che il bottone non funziona,mentre in precedenza quando un solo compito andava benissimo...Ora vi chiedo: non è che per caso un actionperformed può implementare solo un compito alla volta?
spero di essermi spiegato chiaramente anche se ne dubito...:mc: :cry: :muro:
dentro il metodo actionPerformed() del Listener che attacchi al bottone puoi fare tutto quello che vuoi.
addirittura puoi crearti un secondo Listener e attaccare anche quello al bottone, l'evento verrà spedito a tutti i Listener registrati.
posta il codice se vuoi una mano ;)
:D
ecco il codice....
Ti spiego si tratta del disegno di una retta tramite accensione di pixel mediante un algoritmo detto di mid point ,gli if iniziali sono di controllo e non danno problemi,questo metodo accende un pixel alla volta,solo che vorrei bvisualizzasse i dati su una JTextArea chiamata varArea (ho usato il metodo append che spero sia giusto)
I problemi sono sorti quando ho inserito la riga
v = screen.getDLine(new Pixel(x1,y1),new Pixel(x2,y2));
e
varArea.append("X = "+xa+"\n\nY = "+ya+"\n\nD = "+v[0]);
in pratica in double[] v metto un array di double restituito da GetDline in cui sono memorizzati i valori di una variabile D decisiva per l'algoritmo ,ho inizializato l'array come double perchè d può essere sia > che < di zero (spero non sia un errore),un 'ultima cosa ,la classe pixel l'ho creata io e ha solo 2 campi,la x e la y (interi)
public void nextpixelButton_actionPerformed(ActionEvent e) {
int x1 = Integer.parseInt(x1field.getText());
int y1 = Integer.parseInt(y1field.getText());
int x2 = Integer.parseInt(x2field.getText());
int y2 = Integer.parseInt(y2field.getText());
int y0 = y2-y1; //variabile per la variazione delle ordinate
int x0 = x2-x1; //variabile per la variazione delle ascisse
float m =(float)y0/x0; //coefficiente angolare
int i=1;
if((x1 < 0) || (x1 > screen.getXSize()) || (y1 < 0) || (y1 > screen.getYSize())){
JOptionPane.showMessageDialog(this,"Il pixel p1 non appartiene allo screen", "Errore",JOptionPane.ERROR_MESSAGE);
return;
}
if((x2 < 0) || (x2 > screen.getXSize()) || (y2 < 0) || (y2 > screen.getYSize())){
JOptionPane.showMessageDialog(this,"Il pixel p2 non appartiene allo screen", "Errore",JOptionPane.ERROR_MESSAGE);
return;
}
if((m<0)||(m>1)){
JOptionPane.showMessageDialog(this, "La pendenza (m) della retta deve\n essere compresa tra 0 e 1", "Errore", JOptionPane.ERROR_MESSAGE);
return;
}
v = screen.getDLine(new Pixel(x1,y1),new Pixel(x2,y2));
Pixel[] pixels = screen.getLine(new Pixel(x1,y1),new Pixel(x2,y2));
Pixel p = pixels[0];
int xa=p.x;
int ya=p.y;
varArea.append("X = "+xa+"\n\nY = "+ya+"\n\nD = "+v[0]);
if(!screen.isOn(p.x,p.y))
screen.turnOn(p.x,p.y);
else{
while(true){
p = pixels[i++];
xa=p.x;
ya=p.y;
if(!screen.isOn(p.x,p.y)) {
screen.turnOn(p.x, p.y);
varArea.append("X = "+xa+"\n\nY = "+ya+"\n\nD = "+v[i]);
}
}
}
return;
}
maperke no nsegui il modello delle swing? devi creare un metodo actioPerformed(ActionEvent evt) e registrare un listener che abbia quel metodo per il bottono (JButton)
In realtà ilmetodo lo ha creato Jbuilder in automatico e a dire la verità funzionava,solo che in quel modo non era completo.....devo fare in modo che ogni volta che un pixel viene acceso o si visualizzano i dati su una JTextArea o altro,ma questi vanno visualizzati
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.