» »

Vprašanje iz Jave

Vprašanje iz Jave

frost666 ::

Pozdravljeni,

mogoče kdo ve kako bi preko JFrame s klikom na gumb sprožili .wav datoteko. Torej da bi s klikom na gumb sprožili določen ton?

LP

illion ::

kje maš tuki sploh problem :D ?
vežeš enga izmed event listenerjev na gumb, potem pa sam naložiš wav. Kle je primer, kako naj bi z javo zaigral wav datoteko:
http://stackoverflow.com/questions/2630...

frost666 ::

A moram vezati actionPerformed ali mouseClicked? Pol samo v to metodo prilepim to kar si zgoraj postal? Je pa še en problem in sicer vedno ko kliknem run se mi sploh ne odpre ta tabela gumbom. Hočem namreč simulirati kitarski vrat z vsemi toni se pravi imam tabelo 6x24 gumbov in s posameznim klikom bi zaigral določen ton.

illion ::

vseen je kater listener uporabiš, odvisno kako si si zamislu vse skupaj. Dej nalimej kodo, da vidm, zakaj se ti ne odpre ta tabela gumbov..

frost666 ::

https://rapidshare.com/files/3504359913... - evo sm zararu kle je. Kam točn je že treba dt file ker mi je vrgu error za no file found, mal sm ze pozabu tole javo.

illion ::

DPS, a :)?

ok jz nimam netbeansov inštaliranih in koda, ki jo ta ide uspe proizvest, je čist preveč naštrikana in dost nepregledna :S
kle sm ti spisu en res simpl primer, v arrayu stringov so toni, za vsak ton nardi gumb in ga doda na panel, ob kliku pa zaigra ta ton, če je fajl najden. Za event sm uporabu actionEvent, vsakmu gumbu dodam actionCommand, ki je enaka kot ime gumba (lojtre se zamenjajo s podčrtaji). Ob kliku predvidevam, da je ime fajla enak actionCommand-i + '.wav'. Se pravi ob kliku na C proba odpret fajl z imenom 'C.wav', ob kliku na C# pa 'C_.wav'. Pot do teh wav datotek je v nastavljena s spremenjljivko tonesDir.

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.DataLine;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class Adps extends JFrame implements ActionListener{

	private static String tonesDir = "D:/Workspace/Adps/bin/";
	private static String[] tones = {
		"F", "F#","G","G#","A","A#","B","C","C#","D","D#"
	};
	
	public Adps(){
		
		
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.getContentPane().add(getTonesPane());
		this.pack();
		this.setVisible(true);
		
	}
	
	private JPanel getTonesPane(){
		JPanel tones = new JPanel();
		tones.setLayout(new FlowLayout());
		JButton butt;
		for(String tone: Adps.tones){
			butt = new JButton(tone);
			butt.setActionCommand(tone.replace("#", "_"));//ce ima lojtro na koncu, se zamenja z podcrtajem
			butt.addActionListener(this);
			tones.add(butt);
		}
		return tones;
	}
	
	public static void main(String[] args){
		new Adps();
	}

	@Override
	public void actionPerformed(ActionEvent ev) {
		String toneFile = Adps.tonesDir  + ev.getActionCommand()+".wav";
		System.out.print("playing: " + toneFile);
		try {
			AudioInputStream as = AudioSystem.getAudioInputStream(new File(toneFile));
			AudioFormat af = as.getFormat();
			Clip tone = (Clip) AudioSystem.getLine(new DataLine.Info(Clip.class, af));
			tone.open(as);
			tone.start();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}


edit: pa tist audio primer iz stackoverflow-a, ki sm ti ga prej dal kot primer, men ne dela (očitno nimam sun.audio paketov), tko da sm uporabu ta primer: http://www.anyexample.com/programming/j...

Zgodovina sprememb…

  • spremenil: illion ()

frost666 ::

Hmmm sem probal še s to tvojo kodo pa mi odpre lestvico, sem zamenjal direktorij pa dal pravilno ime fajlu pa mi ga ni hotelo zaigrati. Kako bi pa z JPanel naredil tako razpredelnico 24*6 kot sem jo jaz?

illion ::

a ti je v konzoli vrgl kakšn exception, ko si kliknu, da zaigra wav?

kar se tiče razporeditev, je načinov ogromno. Lahko bi naredu recmo 4 panele, sam za zgorno kodo je najlaži tko, da recimo vsakemu gumbu določiš fiksno velikost, recmo:

butt.setPreferredSize(new Dimension(40,30));


potem pa še za jframe določiš velikost:

...
this.getContentPane().add(getTonesPane()); 
//this.pack(); //to zakomentiras
this.setPreferredSize(new Dimension(410,150));
this.setVisible(true); 
..


FlowLayout dodaja elemente iz leve proti desni, ko pride do konca parenta, gre v "novo vrstico". V tem primeru, če bi mel 40 gumbov bi bile 4 "vrstice" gumbov, ker je vsak širok 40px, širina jframa pa je 410, tko da jih v eno vrstico pride 10.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[java]problem z Throws

Oddelek: Programiranje
221569 (1098) killa bee
»

[Java] Ne zažene appleta

Oddelek: Programiranje
51186 (1119) iggy
»

[JAVA] branje iz datoteke

Oddelek: Programiranje
242374 (2009) Bela01
»

[Java]Vprašanja

Oddelek: Programiranje
242084 (1552) Bela01
»

Null pointer Exception[Java]

Oddelek: Programiranje
61428 (1289) infiniteLoop

Več podobnih tem