webForumDet fria alternativet

hjälp med Keystrokes

20 svar · 1 039 visningar · startad av ecke

eckeMedlem sedan juni 200723 inlägg
#1

hej hej,
den här gången behöver jag lite hjälp med tangenttryckningar,
om ni undrar så har jag sökt runt en del på internet och testat själv innan jag vänt mig till webforum :) så jag har i alla fall försökt hittat en lösning själv.

men men, problemet är att jag vill försöka göra ett program där till en början t.ex en jframe kommer upp och sedan när man trycker på en bestämd tangent (höger/vänster pil) så ska det komma upp ett litet meddelande.

jag har kommit så långt så att jag kan klicka på vilken tangent som helst och då spelas ett ljud upp, men jag vet inte hur jag ska göra för att det bara ska hända när man trycker på en bestämd tangent.

koden ser ut såhär:

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.applet.*;
import java.net.URL;

public class KeyClicker extends JFrame
{
AudioClip click;

public static void main(String \[\] args)
{
	new KeyClicker();
}

public KeyClicker()
{
	JFrame ruta = new JFrame();
	this.setSize(400, 400);
	this.setTitle("Key Clicker");
	this.addKeyListener(new Clicker());

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
URL urlClick = MouseClicker.class.getResource("notify.WAV");

	click = Applet.newAudioClip(urlClick);

	this.setVisible(true);
}

private class Clicker extends KeyAdapter
{

public void keyPressed(KeyEvent e)
{
System.out.println(e);
click.play();

	}
}

}

hur ska jag göra för att få någonting att hända när jag trycker på en speciell knapp/tangent?
tack i förhand! Ni killar/tjejer är fantastiska!

SPiNMedlem sedan mars 20007 896 inlägg
#2

I din klass Clicker och metoden keyPressed(), får du göra en koll på KeyEvent e och jämföra mot tangenten som trycks. Varje tangent har ett unikt nummer (int).

...
public void keyPressed(KeyEvent e) {
     if(e.KEY_PRESSED == 13) { // Enter-tangenten trycktes ner
          ...
     }
}

Tyvärr har jag ingen lista över vilka tangenter som representeras av vilka heltal, men det borde vara hyfsat enkelt att googla fram. :)

eckeMedlem sedan juni 200723 inlägg
#3

okay men jag testade att skriva såhär i Clicker klassen:
public void keyPressed(KeyEvent e) {
if(e.KEY_PRESSED == 40) { // <-- neråt pil tangenten.

		click.play();
		}
	else {
		
		System.out.println("du tryckte ner fel tangent");
		}
	}

och ändå så fungerar det inte när jag klickar neråt tangenten. den hoppar över if metoden och går direkt på else. liksom :(
jag har testat med flera andra tangenter också :/
Om ni inte kan se vad som är fel får ni gärna skriva ett eget litet program om nu orkar :)

SPiNMedlem sedan mars 20007 896 inlägg
#4

Ah, jag mindes fel. Följande kanske fungerar bättre :)

if(e.getKeyCode() == KeyEvent.VK_DOWN) {
...

Kolla i API:et för KeyEvent: http://java.sun.com/javase/6/docs/api/java/awt/event/KeyEvent.html

LimeMedlem sedan sep. 2001961 inlägg
#5

VK_ står för övrigt för Virtual Key, eftersom olika operativsystem har olika värden på tangenterna. Skriver du ' == 40' så funkar det i Windowsbaserade system men inte på Mac OS X.

eckeMedlem sedan juni 200723 inlägg
#6

tack! nu funkade det! :) sen blir väl kanske nästa steg att försöka göra något som rör sig när man klickar på tangenten :D

eckeMedlem sedan juni 200723 inlägg
#7

spelprogrammering?

Som jag sa så skulle jag gärna vilja göra ett litet program där man kanske kan flytta en liten boll eller något slags 2D objekt och då undrar jag ifall man Måste göra det i en applet?
jag har kollat lite på internet och i alla "tutorials" jag hittat så har det alltid stått att den ska vara i en applet, måste det vara så?
om inte så kanske ni kan hjälpa mig att ta fram ett sådant program. :)
om det är okej?

LimeMedlem sedan sep. 2001961 inlägg
#8

Nä, måste måste det inte, men det är roligare om man kan få ut sitt spel.

eckeMedlem sedan juni 200723 inlägg
#9

men man kan väll också få ut sitt spel/program igenom att göra en .jar fil?
eller?

CompusaMedlem sedan jan. 20023 327 inlägg
#10

Ja det går även bra med en Jar-fil. Det som kan vara smidigt med en applet är att du kan ha ditt spel "inbäddat" i en webbsida.

Java Web Start kan också vara värt att kolla på:
http://www.java.com/sv/download/faq/java_webstart.xml

LimeMedlem sedan sep. 2001961 inlägg
#11

ecke skrev:

men man kan väll också få ut sitt spel/program igenom att göra en .jar fil?
eller?

Det ska du alltid göra... Finns väldigt få tillfällen där det inte är lönt att distribuera sina applikationer i Jar-filer.

eckeMedlem sedan juni 200723 inlägg
#12

ljud + jar = ?

Nu när jag försöker göra en jar fil av programmet som jag gjort som innehåller lite ljud och så vidare, så fungerar det inte..
Det fungerar fortfarande när jag kör programmet i min utvecklingsmiljö (netbeans & JCreator) men inte när jag gör det till en jar fil?
koden ser ut såhär:

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.applet.*;
import java.net.URL;

public class KeyClicker extends JFrame
{
AudioClip click, click2, click3;
private int i = 0;
public static void main(String [] args)
{
new KeyClicker();
}

public KeyClicker()
{

	JFrame ruta = new JFrame();
	this.setSize(400, 400);
	this.setTitle("Key Clicker");
	this.addKeyListener(new Clicker());

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
URL urlClick = KeyClicker.class.getResource("notify.WAV");
URL urlClick2 = KeyClicker.class.getResource("chord.WAV");
URL urlClick3 = KeyClicker.class.getResource("Windows XP - utloggningsljud.WAV");

	click = Applet.newAudioClip(urlClick);

click2 = Applet.newAudioClip(urlClick2);
click3 = Applet.newAudioClip(urlClick3);
this.setVisible(true);
click3.play();

}

private class Clicker extends KeyAdapter
{

	
 public void keyPressed(KeyEvent e) {
 if(e.getKeyCode() == KeyEvent.VK_DOWN){ // \<-- neråt pil tangenten.

		click.play();
				JOptionPane.showMessageDialog(KeyClicker.this,"You clicked the down key and it is the right key! \\n It has the number " + e.getKeyCode(),
					"nice work!",JOptionPane.INFORMATION_MESSAGE); 
		}
		else if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
				
				JOptionPane.showMessageDialog(KeyClicker.this,"You clicked the escape button",
					"good bye!",JOptionPane.WARNING_MESSAGE); 
					
						System.exit(0);
		
		}
	else {
		
	click2.play();
JOptionPane.showMessageDialog(KeyClicker.this,"You clicked the wrong key, sorry! \\n You clicked a button with number " + e.getKeyCode(),
					"sorry",JOptionPane.ERROR_MESSAGE); 
	
		 
		
	}
		
	}
}

}
finns det något som man direkt kan säga är fel? eller som behöver ändras?

spangoMedlem sedan juni 20008 205 inlägg
#13

Definiera "fungerar inte". Konstiga exceptions? Nåt som inte beter sig som förväntat?

eckeMedlem sedan juni 200723 inlägg
#14

alltså jag menar att när jag gör min jar fil och sedan klickar på den så händer det inget..
men om jag försöker starta den från C:\WINDOWS\system32\cmd.exe (ja kommer inte ihåg vad man kallar den
med koden:
java -jar "D:\stuffs\NetBeans\projects\PassF\dist\PassF.jar"

så startar den inte jar filen, MEN den skriver :

Exception in thread "main" java.lang.NullPointerException
at sun.applet.AppletAudioClip.<init>(Unknown Source)
at java.applet.Applet.newAudioClip(Unknown Source)
at KeyClicker.<init>(KeyClicker.java:31)
at KeyClicker.main(KeyClicker.java:13)

jag har ljud filerna på rätt ställe i \class mappen och allt fungerar när jag kör det från netbeans & JCreator.

hoppas det hjälpte dig lite på rätt väg kanske :)

spangoMedlem sedan juni 20008 205 inlägg
#15

Hamnar ljudfilen i JAR:en?

eckeMedlem sedan juni 200723 inlägg
#16

jag skulle tro det...
det står att den lägger till ljudfilerna när man "buildar" i netbeans.

eckeMedlem sedan juni 200723 inlägg
#17

ingen som kan hjälpa mig?

SPiNMedlem sedan mars 20007 896 inlägg
#18

Har du försökt med att lägga ljudfilerna separat, utanför jar-filen?

eckeMedlem sedan juni 200723 inlägg
#19

hur gör man det?
jag är inte så bekant med att skapa jar filer och java överhuvudtaget. :)

SPiNMedlem sedan mars 20007 896 inlägg
#20

Jag menade alltså att du inte packar in ljudfilerna i jar-filen, utan har dom utanför den. Andledningen till att bilder och ljudfiler inte brukar fungera i jar-filer är att sökvägen inte stämmer. När du läser in dina ljudfiler kan du också försöka med att använda java.net.JarURLConnection.

346 ms totalt · 3 externa anrop · v20260731065814-full.30151723
343 ms — hämta forumlista (db)
0 ms — hämta statistik (cache)
320 ms — hämta tråd, inlägg och bilagor (db)