Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    JApplet Audio visualizzazione

    Salve a tutti! Premetto che non ho molta esperienza con la programmazione.
    Ho implementato una JApplet con le funzionalità di un jukebox.
    Sto cercando di far funzionare la mia JApplet, ma ho riscontrato dei problemi.
    Se faccio partire l'html che me la carica, dal visualizzatore che trovo nel compilatore funziona come dovrebbe, ma da browser: vedo i JButton solo passandoci sopra con il mouse, non vedo le immagini e non carica tutte le canzoni.
    Vi metto a disposizione il codice:
    codice:
    import java.awt.*;
    import java.awt.event.*;
    import java.applet.*;
    import javax.swing.*;
    import java.io.*;
    import java.net.*;
    
    public class Speranza extends JApplet implements ActionListener {
    
    
    	// Dichiarazione JButtons per file audio
    	JButton button1;
    	JButton button2;
    	JButton button3;
    	JButton button4;
    	JButton button5;
    	JButton button6;
    	JButton button7;
    	JButton button8;
    	JButton button9;
    	// Dichiarazione JButtons per altri tasti
    	JButton stopButton;
    	JButton help;
    	JButton ripeti;
    	JButton HappyDays;
    
    	// Dichiarazione AudioClip
    	AudioClip clip[] = new AudioClip[10];
    	AudioClip branoCorrente;
    
    	JLabel testi = new JLabel();
    	JLabel about = new JLabel();
    
    
    	String[] str = {"Testi Canzoni", "1.Ray Charles - I've Got A Woman", "2.Carl Perkins - Blue Suede Shoes", "3.Dean Martin & Frank Sinatra - That's Amore",
    		"4.Elvis Presley - Hound Dog", "5.Elvis Presley - Tutti Frutti", "6.The Four Aces - Love Is A Many Splendored Thing",
    		"7.Chuck Berry & Bo Diddley - Roll over Beethoven", "8.Marilin Monroe - Bye bye baby", "9.Colonna Sonora - Happy Days"};
    
    	// Setta il layout
    	public void start() {
    
    		// BorderLayout che gestisce lo spazio dell'applet
    		BorderLayout b = new BorderLayout();
    		getContentPane().setLayout(b);
    
    		// Setta il font
    		Font font = new Font("TimesRoman", Font.BOLD, 11);
    		setFont(font);
    
    		// Inizializzazione dei JButtons
    		button1=new JButton("Song 1");
    		button2=new JButton("Song 2");
    		button3=new JButton("Song 3");
    		button4=new JButton("Song 4");
    		button5=new JButton("Song 5");
    		button6=new JButton("Song 6");
    		button7=new JButton("Song 7");
    		button8=new JButton("Song 8");
    		button9=new JButton("Song 9");
    		help = new JButton("     Help        ");
    		HappyDays = new JButton("HappyDays");
    		ripeti = new JButton("RIPETI");
    		stopButton=new JButton("STOP");
    
    		JComboBox combo = new JComboBox(str);
    
    		// Aggiunta delle ActionListeners ai JButtons
    		button1.addActionListener(this);
    		button2.addActionListener(this);
    		button3.addActionListener(this);
    		button4.addActionListener(this);
    		button5.addActionListener(this);
    		button6.addActionListener(this);
    		button7.addActionListener(this);
    		button8.addActionListener(this);
    		button9.addActionListener(this);
    		stopButton.addActionListener(this);
    		help.addActionListener(this);
    		ripeti.addActionListener(this);
    		HappyDays.addActionListener(this);
    
    		combo.addActionListener(this);
    
    		// Inizializzazione di 2 JPanel nei quali verranno inseriti i Buttons
    
    		File file = new File("jukebox_largo2.jpg");
    
    		JPanelI s = new JPanelI(file);
    		JPanel p = new JPanel();
    
    		p.setBackground(Color.black);
    		
    		// Griglia del JPanel s
    		GridBagConstraints c = new GridBagConstraints();
    		GridBagLayout gridbag = new GridBagLayout();
    		s.setLayout(gridbag);
    
    		// Aggiunta dei JButtons nel JPanel s
    		s.add(button1);
    		s.add(button2);
    		c.gridwidth = GridBagConstraints.REMAINDER;
    		gridbag.setConstraints(button3, c);
    		s.add(button3);
    		c.gridwidth = 1;
    		gridbag.setConstraints(button4, c);
    		s.add(button4);
    		gridbag.setConstraints(button5, c);
    		s.add(button5);
    		c.gridwidth = GridBagConstraints.REMAINDER;
    		gridbag.setConstraints(button6, c);
    		s.add(button6);
    		c.gridwidth = 1;
    		gridbag.setConstraints(button7, c);
    		s.add(button7);
    		gridbag.setConstraints(button8, c);
    		s.add(button8);
    		c.gridwidth = GridBagConstraints.REMAINDER;
    		gridbag.setConstraints(button9, c);
    		s.add(button9);
    		c.fill = GridBagConstraints.BOTH;
    		gridbag.setConstraints(ripeti, c);
    		s.add(ripeti);
    		c.gridwidth = 0;
    		gridbag.setConstraints(stopButton, c);
    		s.add(stopButton);
    
    		// Aggiunta del JPanel s
    		getContentPane().add("Center",s);
    
    		GridBagLayout gr = new GridBagLayout();
    		GridBagConstraints c1 = new GridBagConstraints();
    
    		p.setLayout(gr);
    		c1.insets.top = 10;
    		c1.insets.bottom = 60;
    		c1.insets.left = 10;
    		c1.insets.right = 10;
    		gr.setConstraints(HappyDays, c1);
    		p.add(HappyDays);
    		p.add(combo);
    		c1.insets.left = 10;
    		gr.setConstraints(help, c1);
    		p.add(help);
    
    		getContentPane().add("South",p);
    
    		getContentPane().add("East", testi);
    		getContentPane().add("West", about);
    
    		/*
    		initializing the audio clip, big advantage to use the variable (it then preloads the midi files into memory). The start/stop will be very fast, ok the startup is slow.
    		*/
    
    
    		try{
    		clip[0]=getAudioClip(new URL(getCodeBase(),"happy days.midi"));
    
    		clip[0].loop();
    		//play clip10 in the background, in the meantime load the other
    		clip[1]=getAudioClip(new URL(getCodeBase(),"Ray Charles - I've Got A Woman.wav"));
    		clip[2]=getAudioClip(new URL(getCodeBase(),"Carl Perkins - Blue Suede Shoes.wav"));
    		clip[3]=getAudioClip(new URL(getCodeBase(),"Dean Martin & Frank Sinatra - That's Amore.wav"));
    		clip[4]=getAudioClip(new URL(getCodeBase(),"Elvis Presley - Hound Dog.wav"));
    		clip[5]=getAudioClip(new URL(getCodeBase(),"Elvis Presley - Tutti Frutti.wav"));
    		clip[6]=getAudioClip(new URL(getCodeBase(),"The Four Aces - Love Is A Many Splendored Thing.wav"));
    		clip[7]=getAudioClip(new URL(getCodeBase(),"chuck berry & bo diddley - roll over beethoven.wav"));
    		clip[8]=getAudioClip(new URL(getCodeBase(),"MARILIN MONROE.- Bye Bye Baby.wav"));
    		clip[9]=getAudioClip(new URL(getCodeBase(),"COLONNA SONORA - Happy Days.wav"));
    
    		branoCorrente = clip[0];}
    		catch (MalformedURLException muEx) {}
    	}
    
    		//stop all the song, before starting a new one. Avoid the "composite" sound.
    	public void stop_all() {
    		clip[1].stop();
    		clip[2].stop();
    		clip[3].stop();
    		clip[4].stop();
    		clip[5].stop();
    		clip[6].stop();
    		clip[7].stop();
    		clip[8].stop();
    		clip[9].stop();
    		clip[0].stop();
    	}
    
    	public void destroy() {
    		stop_all();
    	}
    
    
    		public void actionPerformed(ActionEvent e) {
    
            	if (e.getSource()==button1) {
    				stop_all();
    				branoCorrente = clip[1];
    				branoCorrente.play();
    			} else if (e.getSource()==button2) {
    				stop_all();
    				branoCorrente = clip[2];
    				branoCorrente.play();
    			} else if (e.getSource()==button3) {
    				stop_all();
    				branoCorrente = clip[3];
    				branoCorrente.play();
    			} else if (e.getSource()==button4) {
    				stop_all();
    				branoCorrente = clip[4];
    				branoCorrente.play();
    			} else if (e.getSource()==button5) {
    				stop_all();
    				branoCorrente = clip[5];
    				branoCorrente.play();
    			} else if (e.getSource()==button6) {
    				stop_all();
    				branoCorrente = clip[6];
    				branoCorrente.play();
    			} else if (e.getSource()==button7) {
    				stop_all();
    				branoCorrente = clip[7];
    				branoCorrente.play();
    			} else if (e.getSource()==button8) {
    				stop_all();
    				branoCorrente = clip[8];
    				branoCorrente.play();
    			} else if (e.getSource()==button9) {
    				stop_all();
    				branoCorrente = clip[9];
    				branoCorrente.play();
    			} else if (e.getSource()==stopButton)
    				stop_all();
    			else if (e.getSource()==ripeti)
    				branoCorrente.loop();
    			else if (e.getSource()==HappyDays) {
    				about.setIcon(new ImageIcon("AboutHappyDays.jpg"));
    				testi.setIcon(null);
    			} else {
    				JComboBox cb = (JComboBox)e.getSource();
    				String tex = (String)cb.getSelectedItem();
    	        		testi.setIcon(new ImageIcon(tex + ".jpg"));
    	        		about.setIcon(null);
    			}
    	}
    
    }
    
    import java.awt.*;
    import javax.imageio.*;
    import javax.swing.*;
    import java.io.*;
    import java.awt.image.BufferedImage;
    
    
    
    class PanelI  extends Panel {
    
    	  BufferedImage img;
    	  int width;
    	  int height;
    
    	  public PanelI (File f){
    	    super(true); //crea un Panel con doubleBuffered true
    	    try{
    	      setImage(ImageIO.read(f));
    	    } catch(Exception e) {}
    	}
    
    	  public void setImage(BufferedImage img){
    	    this.img = img;
    	    width = img.getWidth();
    	    height = img.getHeight();
    	  }
    
    	  // sovrascritto il metodo paintComponent passandogli l'immagine e centrandola
    	  public void paintComponent(Graphics g){
    	    super.paintComponent(g);Dimension d = getSize();
    		Insets in = getInsets();
    		int client_width = (d.width - in.right + in.left) / 2;
    		int client_height = (d.height - in.bottom + in.top) / 2;
    		int image_width = img.getWidth(this) / 2;
    		int image_height = img.getHeight(this) / 2;
    	    g.drawImage(img,client_width - image_width, client_height - image_height, this);
    	  }
    	}
    Comunque quello che vorrei sapere è se posso visualizzare l'html da browser oppure mettere la JApplet in una JFrame e far funzionare il tutto con un main(ho provato, ma mi da errore con getCodeBase)...mi vanno bene entrambe le soluzioni, basta che funzionino!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: JApplet Audio visualizzazione

    Originariamente inviato da kiathekiu
    Ho implementato una JApplet con le funzionalità di un jukebox.
    Sto cercando di far funzionare la mia JApplet, ma ho riscontrato dei problemi.
    Se faccio partire l'html che me la carica, dal visualizzatore che trovo nel compilatore funziona come dovrebbe, ma da browser: vedo i JButton solo passandoci sopra con il mouse, non vedo le immagini e non carica tutte le canzoni.

    Comunque quello che vorrei sapere è se posso visualizzare l'html da browser oppure mettere la JApplet in una JFrame e far funzionare il tutto con un main(ho provato, ma mi da errore con getCodeBase)...mi vanno bene entrambe le soluzioni, basta che funzionino!
    Premetto subito che il tuo codice sarebbe altamente migliorabile sia nello stile di scrittura, sia nel "design" delle classi e sia nelle funzionalità fornite.

    Innanzitutto tutta la inizializzazione della interfaccia grafica sarebbe preferibile e meglio farla nel init(), non nel start(). E c'è da tenere presente che quando l'init() viene invocato non si è nel contesto del EDT, quindi si dovrebbe usare SwingUtilities.invokeAndWait() per far eseguire la inizializzazione nel contesto del EDT.

    Vedo che viene anche usata la classe File. Una applet, se non "firmata" digitalmente o se non si smanetta con le policy di sicurezza del JRE, ha delle pesanti restrizioni, tra cui quella di NON poter accedere al file-system locale attraverso le classi di I/O standard (File, FileInputStream ecc...).

    Per il resto, non ho verificato attentamente il codice e non l'ho, chiaramente, provato. Dico solo che il tutto si può fare molto meglio, strutturandolo meglio ad oggetti.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Per quanto riguarda lo start(), inizialmente era init(), ma poi, visto che sto andando per tentativi, l'ho sostituito con start() e mi sono dimenticata di risostituirlo perchè nel risultato non cambiava nulla...

    Mi puoi spiegare come potrei usare SwingUtilities.invokeAndWait()? In un'eventuale classe di main che mi mette l'applet in una finestra? (Scusa se ho tirato qualche sfondone di concetto, ma sono alle prime armi!)

  4. #4
    Qualcuno può aiutarmi a far funzionare l'audio della mia JApplet in una JFrame?? Ne avrei proprio bisogno...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.