|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Jun 2002
Messaggi: 110
|
[Java] Sale ma non scende....
Ho scritto questo codice java, per creare un indicatore per regolare il volume da tastiera.
Il funzionamento del programma è semplice, ho fatto varie immagini che indicano il livello del volume e quando premo il determinato tasto, il programma chiama l'immagine con una tacca in più o in meno. Il problema di questo programma è quando deve scendere, in quanto, il frame rimane fisso sull'ultima immagine in aumento. Quello che mi stupisce però, è come possa funzionare quando si cerca di alzare il volume, e non funzioni poi quando si cerca di abbassare il volume, visto che dovrebbe essere il procedimento inverso di quando si alza. Il programma è fatto senza pannello, cosi da sfruttare la trasparenza dell'immagine ed avere un pannello trasparente. Questo è il codice : import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Controller extends JFrame implements KeyListener{ private Image img[] = new Image[9]; private Image image; private int volume=4; public Controller(String title){ setTitle(title); setSize(100,350); inizializza(); setResizable(false); setLocation(1150,640); image=img[volume]; setIconImage(image); setVisible(true); addKeyListener(this); } public void inizializza(){ img[8]= Toolkit.getDefaultToolkit().getImage("controller massimo.png"); img[7]= Toolkit.getDefaultToolkit().getImage("controller massimo-1.png"); img[6]= Toolkit.getDefaultToolkit().getImage("controller massimo-2.png"); img[5]= Toolkit.getDefaultToolkit().getImage("controller massimo-3.png"); img[4]= Toolkit.getDefaultToolkit().getImage("controller massimo-4.png"); img[3]= Toolkit.getDefaultToolkit().getImage("controller massimo-5.png"); img[2]= Toolkit.getDefaultToolkit().getImage("controller massimo-6.png"); img[1]= Toolkit.getDefaultToolkit().getImage("controller massimo-7.png"); img[0]= Toolkit.getDefaultToolkit().getImage("controller massimo-8.png"); } public void keyPressed(KeyEvent e){ int keyCode=e.getKeyCode(); if(keyCode==KeyEvent.VK_A){ if(volume<8){ volume++; System.out.println("Valore volume : "+volume); image=img[volume]; setIconImage(image); } else{ System.out.println("Valore volume : "+volume); image=img[volume]; setIconImage(image); } }else if(keyCode==KeyEvent.VK_B) { if(volume>0){ volume--; System.out.println("Valore volume : "+volume); image=img[volume]; setIconImage(image); }else{ System.out.println("Valore volume : "+volume); image=img[volume]; setIconImage(image); } } } public void paint(Graphics g) { g.drawImage(image, 10, 40, this); repaint(); } public void keyTyped(KeyEvent e){} public void keyReleased(KeyEvent e){} public static void main(String[] args){ Controller pippo=new Controller("Volume"); } } |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12093
|
ad occhio non funziona perchè quello non è il modo corretto di usare il costrutto else if.
Io avrei scritto: Codice:
if(keyCode==KeyEvent.VK_A){ if(volume < 8) { volume++; System.out.println("Valore volume : "+volume); image=img[volume]; setIconImage(image); } else { System.out.println("Valore volume : "+volume); } } else if(keyCode==KeyEvent.VK_B) { if(volume>0){ volume--; System.out.println("Valore volume : "+volume); image=img[volume]; setIconImage(image); } else { System.out.println("Valore volume : "+volume); } }
__________________
![]() |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Jun 2002
Messaggi: 110
|
L'else if funziona, e questo me lo confermano i vari System.out.println() che ho inserito...
|
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Jan 2007
Messaggi: 70
|
Secondo me dovresti riscrivere il metodo repaint.
Il metodo repaint() di jframe mantiene le immagini precedenti quindi quando si toglie una tacca al volume sovrascrive un'altra itacca sulla tacca precedente, le altre tacche non vengono cancellate! Per questo sembra che non ti faccia nulla. Ora provo a vedere come avevo fatto in precedenza poi ti posto... Ultima modifica di Griffo : 14-03-2007 alle 19:36. |
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Jun 2002
Messaggi: 110
|
ok grazie mille
|
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: Jan 2007
Messaggi: 70
|
Hum... se tipo provassi a modificare il metodo
Codice:
public void paint(Graphics g) { g.drawImage(image, 10, 40, this); repaint(); } Codice:
public void paint(Graphics g) { super.paint(g); g.drawImage(image, 10, 40, this); repaint(); } |
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Jun 2002
Messaggi: 110
|
Cosi come dici tu funziona, però perdo la trasparenza dell'immagine, un modo per far rimanere la trasparenza?
|
![]() |
![]() |
![]() |
#8 |
Member
Iscritto dal: Jan 2007
Messaggi: 70
|
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:49.