Gebby Skrevet 31. juli 2009 Del Skrevet 31. juli 2009 Jeg har et ganske enkelt ønske om at det skal dukke opp et lite bilde på JPanelet mitt når jeg trykker på det. Jeg har forsøkt som dette: Det jeg sliter med er selve lytteren. Jeg har prøvd dette: lage en JFrame feste JPanel på JFrame panel.addMouseListener(new MouseListener()); også har jeg laget en klasse som ser slik ut: public class MouseListener extends MouseAdapter{ public void MouseClicked(MouseEvent e){ towers.add(new Tower(e.getXOnScreen(), e.getYOnScreen(), 300)); } } Akkurat hva som står inni MouseClicked trenger dere ikke forstå, problemet er at den aldri går gjennom den uansett hvor mye jeg trykker. Hjelp? Lenke til kommentar
RavnTM Skrevet 31. juli 2009 Del Skrevet 31. juli 2009 Metoden heter mouseClicked, ikke MouseClicked. Du må passe på store/små bokstaver. Lenke til kommentar
Gebby Skrevet 31. juli 2009 Forfatter Del Skrevet 31. juli 2009 godt poeng faktisk, men får det fortsatt ikke til å funke public Rammeverk(){ ramme = new JFrame(); ramme.setBounds(0,0,WIDTH, HEIGHT); panel = (JPanel)ramme.getContentPane(); panel.add(this); ramme.addMouseListener(new MouseListener()); ramme.setResizable(false); ramme.setVisible(true); } public class MouseListener extends MouseAdapter{ public void mouseClicked(MouseEvent e){ towers.add(new Tower(e.getXOnScreen(), e.getYOnScreen(), 300)); System.out.println("lol"); } ramme er en JFrame, panel er en JPanel. Skjer jo endel andre ting også da, men dette bør være det eneste som er relevant. Lenke til kommentar
NevroMance Skrevet 2. august 2009 Del Skrevet 2. august 2009 Hvis du importerer hele java.awt.event pakka kan jo dette gi deg ett problem. Javas MouseListener Prøv å ende navn på klassen din. Lenke til kommentar
pgdx Skrevet 2. august 2009 Del Skrevet 2. august 2009 ramme.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e){ towers.add(new Tower(e.getXOnScreen(), e.getYOnScreen(), 300)); System.out.println(e); } }); ramme.setResizable(false); ramme.setVisible(true); Lenke til kommentar
HV Skrevet 3. august 2009 Del Skrevet 3. august 2009 I starten hadde du lytteren på panelet istedet, gjør det istedet. Vanskelig å trykke på rammen når det ligger et panel oppå. Lenke til kommentar
Gebby Skrevet 3. august 2009 Forfatter Del Skrevet 3. august 2009 Det er tydelig at jeg ikke har forstått hvor panel legger seg og sånn, men nå har jeg prøvd alt av ting dere har foreslått og brukt koden som pgdx ga meg, og det funker fortsatt ikke, så nå bare limer jeg inn koden. Hvis noen hadde giddet å se på paint metoden og se om det er noe der som krasjer med mouselistener eller noe hadde jeg blitt glad. Det var nemlig sånn for en stund siden at jeg kunne klare å få mouselisteneren til å funke, men da ville den ikke tegne, og det er også sånn at hvis jeg bytter ut den "getContentPane()" greia på staretn med en "new JPanel()" så får jeg en feilmelding i paintmetoden på "offscreen.getGraphics()". Det er forresten bare å ignorere metoder som utIverden, newWave osv, det meste av det som printes ut er bare ord som viser meg at nå går den gjennom det skrittet sånn at jeg vet at det funker. Det som refererer til tower og creep fungerer også, det har gått fint uten mouseListeneren. Setter utrolig stor pris på all hjelp! package towerD2; import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; public class Rammeverk extends Canvas{ ArrayList<Creep> creeps = new ArrayList<Creep>(); ArrayList<Creep> aktiveCreeps = new ArrayList<Creep>(); ArrayList<Tower> towers = new ArrayList<Tower>(); JFrame ramme; JPanel panel; Image offscreen; int creepspawnX = 122; int creepspawnY = 308; int speedX = 2; int speedY = 0; int creepHP = 800; int antallCreeps = 9; public static final int WIDTH = 800; public static final int HEIGHT = 600; int FPS = 60; int lagCounter; long tidMellomWaves; public Rammeverk(){ ramme = new JFrame(); panel = (JPanel)ramme.getContentPane(); ramme.setBounds(0,0,WIDTH, HEIGHT); ramme.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); panel.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e){ towers.add(new Tower(e.getXOnScreen(), e.getYOnScreen(), 300)); System.out.println(e); } }); panel.add(this); ramme.setResizable(false); ramme.setVisible(true); } public void paint(Graphics g){ if(offscreen==null) offscreen = createImage(WIDTH, HEIGHT); Graphics og = offscreen.getGraphics(); og.setColor(this.getBackground()); og.setClip(0,0,getSize().width, getSize().height); og.fillRect(0, 0, WIDTH, HEIGHT); for(int i=0; i<aktiveCreeps.size(); i++) og.drawImage(aktiveCreeps.get(i).getImg(),aktiveCreeps.get(i).getX(), aktiveCreeps.get(i).getY(), null); for(int i=0; i<towers.size(); i++) og.drawImage(towers.get(i).getBilde(), towers.get(i).getX(), towers.get(i).getY(), null); g.drawImage(offscreen, 0, 0, null); } public void update(){ for(int i=0; i<aktiveCreeps.size(); i++){ aktiveCreeps.get(i).move(); } if(!creeps.isEmpty()&&lagCounter == FPS){ utIVerden(); lagCounter = 0; } if(lagCounter>FPS) lagCounter = 0; lagCounter++; } public void utIVerden(){ System.out.println("nytt creep til verden"); creeps.get(0).setAktiv(true); aktiveCreeps.add(creeps.get(0)); creeps.remove(0); } public void game(){ lagCounter = 0; newWave(); long beginTime = System.currentTimeMillis(); while(isVisible()){ while(System.currentTimeMillis()-beginTime > 1000/FPS){ beginTime = System.currentTimeMillis(); update(); paint(getGraphics()); } } } public void newWave(){ System.out.println("lage ny wave" + creeps.size () + " " + aktiveCreeps.size()); tidMellomWaves = System.currentTimeMillis(); for(int i=0; i<antallCreeps; i++){ creeps.add(new Creep(creepspawnX,creepspawnY, speedX, speedY, creepHP)); } } public static void main(String[] args){ Rammeverk rammeverk = new Rammeverk(); rammeverk.game(); } } Lenke til kommentar
pgdx Skrevet 3. august 2009 Del Skrevet 3. august 2009 Prøv å bytte ut konstuktøren din med denne: public Rammeverk() { ramme = new JFrame(); panel = new JPanel(); ramme.setBounds(0, 0, WIDTH, HEIGHT); ramme.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); panel.add(this); ramme.add(panel); ramme.setResizable(false); ramme.setVisible(true); panel.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { towers.add(new Tower(e.getXOnScreen(), e.getYOnScreen(), 300)); System.out.println(e); } }); } Lenke til kommentar
Gebby Skrevet 3. august 2009 Forfatter Del Skrevet 3. august 2009 Der funket mouseListener ja, men nå tegner den ingenting ;p Men nå kjørte jeg debug og så gjennom alt, og den går innom "paint", painter først "og" også over på "g", men jeg ser det ikke. Kan det være at det males på et lag som jeg ikke lenger ser siden mouseListener ligger over den? Noe sånt? Lenke til kommentar
pgdx Skrevet 3. august 2009 Del Skrevet 3. august 2009 Der funket mouseListener ja, men nå tegner den ingenting ;p Men nå kjørte jeg debug og så gjennom alt, og den går innom "paint", painter først "og" også over på "g", men jeg ser det ikke. Kan det være at det males på et lag som jeg ikke lenger ser siden mouseListener ligger over den? Noe sånt? Nå tror jeg det er på tide at du leser en av Sun sine guider. http://java.sun.com/docs/books/tutorial/uiswing/index.html Men, nei, det er ikke fordi mouseListeneren ligger oppå. Lenke til kommentar
Cyberfrog Skrevet 3. august 2009 Del Skrevet 3. august 2009 Der funket mouseListener ja, men nå tegner den ingenting ;p Etter konstruktøren har visst canvas (this) størrelse (0,0). For liten plass å tegne noe på. ;p this.setBounds(0, 0, WIDTH, HEIGHT); Med forbehold om at jeg selvsagt ikke har fungerende Creep- og Tower-klasser å teste med. Og ikke har grublet over evt. mer hensiktsmessige løsninger. Lenke til kommentar
Gebby Skrevet 4. august 2009 Forfatter Del Skrevet 4. august 2009 Er nok på tide jeg tar en liten tutorial i gui ja cyberfrog: Løsningen din gjorde at den igjen kunne tegne, men den godkjente bare musetrykk som hadde y-verdi under 30 fra toppmargen..Merkelige saker Fant en løsning allikevel da, fjernet bare "ramme." foran mouseListener og ersattet med "this.", så funket det perfekt. Skjønner ikke hvorfor det måtte være sånn, men det er vel derfor jeg må ta en tutorial. Tusen takk for hjelp alle sammen Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå