Permalänk
Medlem

Flytta bilder i JFrame

Hållit på lite med JFrame och så men undrar om nån vet hur jag när programmet är igång kan få bilder att flytta på sig. repaint funktionen verkar vara vad jag letar efter men jag får den inte att funka i alla fall.

Hoppas nån kan hjälpa mig

Permalänk
Medlem
Skrivet av Gamewolf:

Hållit på lite med JFrame och så men undrar om nån vet hur jag när programmet är igång kan få bilder att flytta på sig. repaint funktionen verkar vara vad jag letar efter men jag får den inte att funka i alla fall.

Hoppas nån kan hjälpa mig

Du kommer nog få mer hjälp om du visar din kod och utifrån den beskriver vad som inte fungerar... Just nu är din beskrivning otroligt flytande

Visa signatur

|| Intel 8700K || MSI GTX 1080 TI Gaming X || Xonar DG || Samsung 750 EVO 500GB & Kingston A2000 1TB & Samsung 960 EVO 250GB || XFX XXX 650W || Antec P183 || Asus G-Sync RoG Swift PG279Q || Dell XPS 15 || Thinkpad X220

The Force is like Duct Tape, it has a light side, a dark side, and holds the universe together.

Permalänk
Medlem

import javax.swing.*; import java.util.*; import java.awt.*; import java.awt.event.*; /** * Simple program that loads, rotates and displays an image. * Uses the file Duke_Blocks.gif, which should be in * the same directory. * * @author MAG * @version 20Feb2009 */ public class RotateImage extends JPanel{ static int xk = 0; static int yk = 0; JFrame frame = new JFrame("RotateImage"); // Declare an Image object for us to use. Image image; // Create a constructor method public RotateImage(){ super(); // Load an image to play with. image = Toolkit.getDefaultToolkit().getImage("path2985.png"); } public void paintComponent(Graphics g){ Graphics2D g2d=(Graphics2D)g; // Create a Java2D version of g. g2d.translate(xk, yk); // Translate the center of our coordinates. g2d.rotate(0); // Rotate the image by 1 radian. g2d.drawImage(image, xk, yk, 200, 200, this); } public static void main (String[]args ){ JFrame frame = new JFrame("RotateImage"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(600,400); frame.addKeyListener(new KeyAdapter() { public void keyPressed ( KeyEvent e ) { if(e.getKeyCode()==KeyEvent.VK_RIGHT) { JOptionPane.showMessageDialog(null,"funkar"); xk = xk + 100; } } }); RotateImage panel = new RotateImage(); frame.setContentPane(panel); frame.setVisible(true); frame.setResizable(false); boolean igång = true; } }

Det är ihopsatt från lite olika exempel på internet ( inte min kod i grunden alltså) men detta är bara för att försöka få en förståelse för hur det funkar innan jag försöker göra något eget större. Tanken är att varje gång man trycker ner höger tangent så ska bilden röra sig 100 pixlar till höger.

Permalänk
Medlem

ok ja löste mitt problem fast nu har jag ett annat ^^

import javax.swing.*; import java.util.*; import java.awt.*; import java.awt.event.*; /** * Simple program that loads, rotates and displays an image. * Uses the file Duke_Blocks.gif, which should be in * the same directory. * * @author MAG * @version 20Feb2009 */ public class RotateImage extends JPanel{ static boolean action = false; boolean igång = true; static int xk = 0; static int yk = 0; JFrame frame = new JFrame("RotateImage"); // Declare an Image object for us to use. Image image; // Create a constructor method public RotateImage(){ super(); // Load an image to play with. image = Toolkit.getDefaultToolkit().getImage("BlobA1.png"); } public void paintComponent(Graphics g){ Graphics2D g2d=(Graphics2D)g; // Create a Java2D version of g. g2d.translate(xk, yk); // Translate the center of our coordinates. g2d.rotate(0); // Rotate the image by 1 radian. g2d.drawImage(image, xk, yk, 200, 200, this); } class idle extends Thread{ public void run(){ while(true){ if (igång == false){ try{ Thread.sleep(1000);} catch(InterruptedException e){ } if (igång == false) { image = Toolkit.getDefaultToolkit().getImage("BlobA2.png"); frame.repaint(); } } } } } public static void main (String[]arg ){ idle inst = new idle(); inst.start(); final JFrame frame = new JFrame("RotateImage"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(600,400); frame.addKeyListener(new KeyAdapter() { public void keyPressed ( KeyEvent e ) { if(e.getKeyCode()==KeyEvent.VK_RIGHT) { xk = xk + 1; frame.repaint(); action = true; } else if (e.getKeyCode()==KeyEvent.VK_LEFT){ xk = xk - 1; frame.repaint(); } else if (e.getKeyCode()==KeyEvent.VK_UP){ yk = yk - 1; frame.repaint(); } else if (e.getKeyCode()==KeyEvent.VK_DOWN){ yk = yk + 1; frame.repaint(); } } public void keyReleased ( KeyEvent e ){ action = false; } }); RotateImage panel = new RotateImage(); frame.setContentPane(panel); frame.setVisible(true); frame.setResizable(false); boolean igång = true; } }

felmeddelandet jag får är "non-static variable this cannot be referenced from a static context" med pekning på rad 76 "idle inst = new idle();"

jag får inte instanseringen att funka, nån som kan hjälpa mig?

Permalänk
Medlem
Skrivet av Gamewolf:

ok ja löste mitt problem fast nu har jag ett annat ^^

import javax.swing.*; import java.util.*; import java.awt.*; import java.awt.event.*; /** * Simple program that loads, rotates and displays an image. * Uses the file Duke_Blocks.gif, which should be in * the same directory. * * @author MAG * @version 20Feb2009 */ public class RotateImage extends JPanel{ static boolean action = false; boolean igång = true; static int xk = 0; static int yk = 0; JFrame frame = new JFrame("RotateImage"); // Declare an Image object for us to use. Image image; // Create a constructor method public RotateImage(){ super(); // Load an image to play with. image = Toolkit.getDefaultToolkit().getImage("BlobA1.png"); } public void paintComponent(Graphics g){ Graphics2D g2d=(Graphics2D)g; // Create a Java2D version of g. g2d.translate(xk, yk); // Translate the center of our coordinates. g2d.rotate(0); // Rotate the image by 1 radian. g2d.drawImage(image, xk, yk, 200, 200, this); } class idle extends Thread{ public void run(){ while(true){ if (igång == false){ try{ Thread.sleep(1000);} catch(InterruptedException e){ } if (igång == false) { image = Toolkit.getDefaultToolkit().getImage("BlobA2.png"); frame.repaint(); } } } } } public static void main (String[]arg ){ idle inst = new idle(); inst.start(); final JFrame frame = new JFrame("RotateImage"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(600,400); frame.addKeyListener(new KeyAdapter() { public void keyPressed ( KeyEvent e ) { if(e.getKeyCode()==KeyEvent.VK_RIGHT) { xk = xk + 1; frame.repaint(); action = true; } else if (e.getKeyCode()==KeyEvent.VK_LEFT){ xk = xk - 1; frame.repaint(); } else if (e.getKeyCode()==KeyEvent.VK_UP){ yk = yk - 1; frame.repaint(); } else if (e.getKeyCode()==KeyEvent.VK_DOWN){ yk = yk + 1; frame.repaint(); } } public void keyReleased ( KeyEvent e ){ action = false; } }); RotateImage panel = new RotateImage(); frame.setContentPane(panel); frame.setVisible(true); frame.setResizable(false); boolean igång = true; } }

Dold text

felmeddelandet jag får är "non-static variable this cannot be referenced from a static context" med pekning på rad 76 "idle inst = new idle();"

jag får inte instanseringen att funka, nån som kan hjälpa mig?

Om du flyttar all kod du har i main-metoden till konstruktorn istället slipper du statiska variabler.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

jo men jag lyckas fortfarande inte starta den. det är det som är det stora problemet för min del.

Permalänk
Medlem
Skrivet av Gamewolf:

jo men jag lyckas fortfarande inte starta den. det är det som är det stora problemet för min del.

Problemet är att du försöker komma åt icke-statiska variabler från ett statiskt kontext. Om du flyttar in koden i konstruktorn som jag skrev i mitt förra svar så kommer du iaf slippa de problemen.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

Jo jag försökte det men det hjälpte ändå inte, problemet är ju att jag försöker få igång det från mainen som är statisk. Jag behöver ett sätt att starta min idle class.

Permalänk
Medlem
Skrivet av Gamewolf:

Jo jag försökte det men det hjälpte ändå inte, problemet är ju att jag försöker få igång det från mainen som är statisk. Jag behöver ett sätt att starta min idle class.

Detta fungerar inte:

public class Korv { public Korv() { // kod } private Pepparkaka pepparkaka; public static void main(String[] args) { pepparkaka = new Pepparkaka(); // går inte att tilldela värde till en instansvariabel ur ett statiskt kontext. new Korv(); } }

Detta fungerar:

public class Korv { public Korv() { pepparkaka = new Pepparkaka(); // kod som arbetar med pepparkaka } private Pepparkaka pepparkaka; public static void main(String[] args) { new Korv(); } }

Testa att göra på samma sätt i din kod.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

jag verkar få samma meddelande men nu pekar den på new istället

Permalänk
Medlem
Skrivet av Gamewolf:

jag verkar få samma meddelande men nu pekar den på new istället

Kan du visa koden som den ser ut nu?

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Permalänk
Medlem

mycket möjligt att det är jag som missförstått dig

import javax.swing.*; import java.util.*; import java.awt.*; import java.awt.event.*; /** * Simple program that loads, rotates and displays an image. * Uses the file Duke_Blocks.gif, which should be in * the same directory. * * @author MAG * @version 20Feb2009 */ public class RotateImage extends JPanel{ static boolean action = false; boolean igång = true; static int xk = 0; static int yk = 0; JFrame frame = new JFrame("RotateImage"); // Declare an Image object for us to use. Image image; // Create a constructor method public RotateImage(){ super(); // Load an image to play with. image = Toolkit.getDefaultToolkit().getImage("BlobA1.png"); } public void paintComponent(Graphics g){ Graphics2D g2d=(Graphics2D)g; // Create a Java2D version of g. g2d.translate(xk, yk); // Translate the center of our coordinates. g2d.rotate(0); // Rotate the image by 1 radian. g2d.drawImage(image, xk, yk, 200, 200, this); } class idle extends Thread{ public void run(){ } } public class aktivera{ public aktivera(){ idle test = new idle(); } } public static void main (String[]arg ){ new aktivera(); final JFrame frame = new JFrame("RotateImage"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(600,400); frame.addKeyListener(new KeyAdapter() { public void keyPressed ( KeyEvent e ) { if(e.getKeyCode()==KeyEvent.VK_RIGHT) { xk = xk + 1; frame.repaint(); action = true; } else if (e.getKeyCode()==KeyEvent.VK_LEFT){ xk = xk - 1; frame.repaint(); } else if (e.getKeyCode()==KeyEvent.VK_UP){ yk = yk - 1; frame.repaint(); } else if (e.getKeyCode()==KeyEvent.VK_DOWN){ yk = yk + 1; frame.repaint(); } else if (e.getKeyCode()==KeyEvent.VK_SPACE){ for (int hopp = 1; hopp <= 20; hopp++){ yk = yk - 1; frame.repaint(); try{ Thread.sleep(50);} catch(InterruptedException f){ }} } } public void keyReleased ( KeyEvent e ){ action = false; } }); RotateImage panel = new RotateImage(); frame.setContentPane(panel); frame.setVisible(true); frame.setResizable(false); boolean igång = true; } }

Dold text
Permalänk
Medlem
Skrivet av Gamewolf:

mycket möjligt att det är jag som missförstått dig

Vi kan bena ut det här. Utan att skriva allt för mycket har du för stunden en struktur likt denna:

public class RotateImage extends JPanel { // 1 public RotateImage() { // 2 ... } class idle extends Thread { // 3 ... } public class aktivera { // 4 ... } public static void main(String[] args) { // 5 ... } }

1 är din huvudklass — den klass som innehåller metoden main (5) och dina båda inre klasser (3, 4)
2 är konstruktorn för din huvudklass. Det är denna jag tjatar om;
3 och 4 är inre klasser;
5 är din main-metod — startpukten för hela ditt program.

När jag säger "flytta kod från main till konstruktorn" menar jag att du ska ta koden du har inuti main (5) och flytta den till konstruktorn (2). Det enda som behöver finnas inuti main är initialiseringskoden för RotatePanel och JFrame.

public static void main(String[] args) { final JFrame frame = new JFrame("RotateImage"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(600,400); RotatePanel panel = new RotatePanel(); frame.setContentPane(panel); panel.begin(); }

Flytta allting som har med KeyListener att göra till konstruktorn (2) istället och bind den till panelen med this.addKeyListener(new KeyAdapter() { .. och så vidare.

Här har jag skapat en ny metod, begin(), som kickar igång idle och sätter de variabler som behövs.

private void begin() { igång = true; xk = 0; yk = 0; }

Klassen aktivera fyller inget syfte så du kan ta bort den — jag antar att du la med den när jag började tjafsa om konstruktorer. I övrigt finns en del kvar att göra med programmet, men du slipper i alla fall problem med statiska variabler. Observera att både xk och yk inte behöver eller bör vara static om du följer mitt exempel.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

aha jo då var det jag som missförstod dig ja. Dock vet jag inte riktigt hur du tänkt jag ska binda min keylistener till framen. vare sig this. eller frame. funkar i den?

Permalänk
Medlem
Skrivet av Gamewolf:

aha jo då var det jag som missförstod dig ja. Dock vet jag inte riktigt hur du tänkt jag ska binda min keylistener till framen. vare sig this. eller frame. funkar i den?

this fungerar om du gör det på rätt ställe (dvs. inuti konstruktorn) och du binder till panelen istället för framen.

Skickades från m.sweclockers.com

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

att bara använda this. funkar inte för mig i alla fall när den är i konstruktorn, hur menar du att jag ska binda den till panelen?

Permalänk
Medlem
Skrivet av Gamewolf:

att bara använda this. funkar inte för mig i alla fall när den är i konstruktorn, hur menar du att jag ska binda den till panelen?

Som jag skrev ovan:

public RotateImage() { this.addKeyListener(new KeyAdapter() { .. och så vidare }); .. konstruktorkod fortsätter här

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

men då funkar den inte, den ger mig visserligen inget felmeddelande men själva framen svarar inte på kommandona

Permalänk
Medlem
Skrivet av Gamewolf:

men då funkar den inte, den ger mig visserligen inget felmeddelande men själva framen svarar inte på kommandona

Lägg till

this.setFocusable(true); this.requestFocusInWindow();

Om det ändå inte fungerar, testa att flytta this.requestFocusInWindow(); till begin()-metoden

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

Antar att det är såhär du menar?

import javax.swing.*; import java.util.*; import java.awt.*; import java.awt.event.*; /** * Simple program that loads, rotates and displays an image. * Uses the file Duke_Blocks.gif, which should be in * the same directory. * * @author MAG * @version 20Feb2009 */ public class RotateImage extends JPanel{ int xk = 0; int yk = 0; JFrame frame = new JFrame("RotateImage"); // Declare an Image object for us to use. Image image; // Create a constructor method public RotateImage(){ super(); // Load an image to play with. image = Toolkit.getDefaultToolkit().getImage("BlobA1.png"); this.setFocusable(true); this.requestFocusInWindow(); this.addKeyListener(new KeyAdapter() { public void keyPressed ( KeyEvent e ) { if(e.getKeyCode()==KeyEvent.VK_RIGHT) { xk = xk + 1; frame.repaint(); } else if (e.getKeyCode()==KeyEvent.VK_LEFT){ xk = xk - 1; frame.repaint(); } else if (e.getKeyCode()==KeyEvent.VK_UP){ yk = yk - 1; frame.repaint(); } else if (e.getKeyCode()==KeyEvent.VK_DOWN){ yk = yk + 1; frame.repaint(); } else if (e.getKeyCode()==KeyEvent.VK_SPACE){ for (int hopp = 1; hopp <= 20; hopp++){ yk = yk - 1; frame.repaint(); try{ Thread.sleep(50);} catch(InterruptedException f){ }} } } public void keyReleased ( KeyEvent e ){ } }); } public void paintComponent(Graphics g){ Graphics2D g2d=(Graphics2D)g; // Create a Java2D version of g. g2d.translate(xk, yk); // Translate the center of our coordinates. g2d.rotate(0); // Rotate the image by 1 radian. g2d.drawImage(image, xk, yk, 200, 200, this); } public static void main (String[]arg ){ final JFrame frame = new JFrame("RotateImage"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(600,400); RotateImage panel = new RotateImage(); frame.setContentPane(panel); frame.setVisible(true); frame.setResizable(false); } }

Dold text

får det ändå inte att funka

sen vet jag inte vad du menar med begin() metoden?

Permalänk
Medlem
Skrivet av Gamewolf:

får det ändå inte att funka

Testa ändra main till:

final JFrame frame = new JFrame("RotateImage"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(600,400); RotateImage panel = new RotateImage(); frame.add(panel); frame.setResizable(false); frame.setVisible(true); panel.requestFocusInWindow();

Ta bort this.requestFocusInWindow() ur konstruktorn.

Här ska finnas ett fungerande exempel: http://stackoverflow.com/questions/8498147/addkeylistener-doe...

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

får inte rätt på det då heller, ersatte hela min main med det du skrev

Permalänk
Medlem
Skrivet av Gamewolf:

får inte rätt på det då heller, ersatte hela min main med det du skrev

Detta är testat och fungerar

import javax.swing.*; import java.awt.*; import java.awt.event.*; /** * Simple program that loads, rotates and displays an image. Uses the file * Duke_Blocks.gif, which should be in the same directory. * * @author MAG * @version 20Feb2009 */ public class RotateImage extends JPanel { int xk = 0; int yk = 0; // Declare an Image object for us to use. Image image; // Create a constructor method public RotateImage() { // Load an image to play with. image = Toolkit.getDefaultToolkit().getImage("BlobA1.png"); this.setFocusable(true); this.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_RIGHT) { xk = xk + 1; RotateImage.this.repaint(); } else if (e.getKeyCode() == KeyEvent.VK_LEFT) { xk = xk - 1; RotateImage.this.repaint(); } else if (e.getKeyCode() == KeyEvent.VK_UP) { yk = yk - 1; RotateImage.this.repaint(); } else if (e.getKeyCode() == KeyEvent.VK_DOWN) { yk = yk + 1; RotateImage.this.repaint(); } else if (e.getKeyCode() == KeyEvent.VK_SPACE) { for (int hopp = 1; hopp <= 20; hopp++) { yk = yk - 1; RotateImage.this.repaint(); try { Thread.sleep(50); } catch (InterruptedException f) { } } } } public void keyReleased(KeyEvent e) { } }); } public void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D) g; // Create a Java2D version of g. g2d.translate(xk, yk); // Translate the center of our coordinates. g2d.rotate(0); // Rotate the image by 1 radian. g2d.drawImage(image, xk, yk, 200, 200, this); } public static void main(String[] arg) { final JFrame frame = new JFrame("RotateImage"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(600, 400); RotateImage panel = new RotateImage(); frame.setContentPane(panel); frame.setVisible(true); frame.setResizable(false); } }

Dold text
Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

tack så mycket, dock måste jag fråga hur jag använder repaint funktionen i din version. i min gammla använde jag ju frame.repaint medans du här använder RotateImage.this.repaint hur gör jag om jag vill använda repaint utanför konstruktorn?

Permalänk
Medlem
Skrivet av Gamewolf:

tack så mycket, dock måste jag fråga hur jag använder repaint funktionen i din version. i min gammla använde jag ju frame.repaint medans du här använder RotateImage.this.repaint hur gör jag om jag vill använda repaint utanför konstruktorn?

Du kan använda repaint(); eller this.repaint(); var som helst i din RotateImage-klass, förutom i statiska metoder. Anledningen till att vi använder RotateImage.this inuti KeyAdapter är för att "this" knyts till KeyAdapter-objektet just där.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

ok tack, det var så enkelt dock har jag en annan fråga som dök up. om jag vill starta en annan thread klass genom min main så får jag felmeddelandet ( non-static variable this cannot be referenced from a static context) medans om jag startar en thread klass från en helt annan .java fil så funkar det fint?

Permalänk
Medlem
Skrivet av Gamewolf:

ok tack, det var så enkelt dock har jag en annan fråga som dök up. om jag vill starta en annan thread klass genom min main så får jag felmeddelandet ( non-static variable this cannot be referenced from a static context) medans om jag startar en thread klass från en helt annan .java fil så funkar det fint?

Läs mina tidigare posts angående static. Det finns inget "this" i ett statiskt kontext (exempel på "static contexts" är metoder med nyckelordet static framför, t ex main)

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

Gamewolf jag har följt den här tråden och jag tycker du har tagit dig lite vatten över huvudet i ditt exempel.
Om du försöker lära dig något så börja med enklare saker så du förstår dem, som ett exempel med att lära dig förstå hur static fungerar.

Om du deklarerar något till static så innebär det att det finns bara en instance av den, vilket i sin tur innebär att den ägs av klassen, och inte objektet.
Det innebär att om du skapar upp ett objekt av en klass, typ "MyClass c = new MyClass();", så får du EN instance (av oändligt många) av MyClass klassen.
MEN, om du har deklarerat något till static så äger KLASSEN den metoden/variabeln, INTE din instance.
Då kan du använda den såhär: "MyClass.myStaticMethod();"

Skillnad:

Static:
"MyClass.myStaticMethod();" <--- klassen äger den metoden

Non static:
"MyClass myClass = new MyClass();
myClass.myNonStaticMethod();" <--- instancen AV den här klassen äger den här metoden

Några exempel:

En main metod måste vara static för att när du kör ett java program så måste den veta exakt vad den ska köra. Genom att säga att den är static så berättar du för java att, det finns bara en utav den här, det finns inte 100 olika som du måste välja mellan. Utan bara 1, och det är den du ska köra.

this används för att berätta vilket av alla instancer av ett objekt som finns. Så om du är i ett objekt, så kanske det lever 100st sådana objekt, men this berättar för dig att det är just det här objektet av alla 100 som du ska använda. Det är inget som används i static av den anledningen att static behöver det inte, det finns bara en.

Det här är inget svar på dina frågor utan ett försök att hjälpa dig förstå lite varför du får dom problemen du får.
Och jag tycker det är viktigare för dig att du förstår det än att bara ha en lösning, så därför tycker jag du ska gå tillbaka lite med lättare saker för dig, och försöka förstå dem.

Lycka till, hör av dig om du behöver mer hjälp men jag kommer inte ge dig färdiga lösningar till något.

Permalänk
Medlem
Skrivet av Teknocide:

Läs mina tidigare posts angående static. Det finns inget "this" i ett statiskt kontext (exempel på "static contexts" är metoder med nyckelordet static framför, t ex main)

Jo men det är kanske därför jag är så konfunderad, jag förstår inte varför "this" finns med i felmeddelandet eller hur jag löser det

om man tittar på vad den pekar på så är det på "new" den verkar kalla "this"

Skickades från m.sweclockers.com