JFrame dynamische Größe
-
Guten Morgen!
Ich habe folgenden Sourcecode (Vollständigkeitshalber) :
package java2dpixelrennen; import java.awt.*; import java.awt.event.KeyEvent; import java.awt.image.*; import java.util.logging.Level; import java.util.logging.Logger; import java.util.Scanner; /** * * @author ITEDVO */ public class Java2DPixelrennen extends javax.swing.JFrame { private Graphics2D g; private BufferStrategy strategy; private int x = 100, y = 100; private boolean leftDown, rightDown, upDown, downDown, running = true; private double deg = 0; private double realdeg = 0; private int framewidth; private int frameheight; private int objwidth; private int objheight; private Thread runner = new Thread() { @Override public void run() { DrawRahmen(); while(running) { g = (Graphics2D) strategy.getDrawGraphics(); //clearOval(); if(upDown) { x+=CalcX(); y+=CalcY(); } if(leftDown) realdeg += 3; else if(rightDown) realdeg -= 3; Collission(); this.DrawPixel(); strategy.show(); try { sleep(10L); } catch (InterruptedException ex) { Logger.getLogger(Java2DPixelrennen.class.getName()).log(Level.SEVERE, null, ex); } } System.exit(0); } public void DrawRahmen() { g = (Graphics2D) strategy.getDrawGraphics(); g.setColor(Color.getHSBColor((float)Math.floor(Math.random() * 10 + 1), (float)Math.floor(Math.random() * 10 + 1), (float)Math.floor(Math.random() * 10 + 1))); for(int i=0; i<10; i++) g.drawRect(10+i, 30+i, framewidth-20-i*2, frameheight-40-i*2); } public void clearOval() { g.setColor(Color.WHITE); g.fillOval(x, y, objwidth, objheight); g.drawOval(x, y, objwidth, objwidth); } public void Collission() { if(x < 20) x = framewidth-objwidth-21; if(x > framewidth-objwidth-20) x = 21; if(y < 40) y = frameheight-objheight-21; if(y > frameheight-objheight-20) y = 41; } public void DrawPixel() { g.setColor(Color.getHSBColor((float)Math.floor(Math.random() * 200 + 1), (float)Math.floor(Math.random() * 200 + 1), (float)Math.floor(Math.random() * 200 + 1))); g.fillOval(x, y, objwidth, objheight); g.drawOval(x, y, objwidth, objheight); } public int CalcX() { int ret = 0; double rad = Math.toRadians(realdeg); ret = (int)(5 * Math.cos(rad)); if(realdeg == 90 || realdeg == 270) ret = 0; return ret; } public int CalcY() { int ret = 0; double rad = Math.toRadians(realdeg); ret = (int)(5 * Math.sin(rad)); if(realdeg == 180 || realdeg == 0) ret = 0; return ret*-1; } }; public static void main(String[] args) { int fh,fw,oh,ow; Scanner scan = new Scanner(System.in); System.out.println("Window height: "); fh = scan.nextInt(); System.out.println("Window width: "); fw = scan.nextInt(); System.out.println("Objekt height: "); oh = scan.nextInt(); System.out.println("Objekt width: "); ow = scan.nextInt(); Java2DPixelrennen frame = new Java2DPixelrennen(fw,fh,ow,oh); frame.runner.start(); } public Java2DPixelrennen(int ow, int oh, int fw, int fh) { this.objwidth = ow; this.objheight = oh; this.framewidth = fw; this.frameheight = fh; this._initWindow(); this._initStrategy(); this._initListener(); this.g = (Graphics2D) this.strategy.getDrawGraphics(); this.g.setColor(Color.WHITE); this.g.fillRect(0, 0, framewidth, frameheight); strategy.show(); } private void _initWindow() { this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.getContentPane().setBackground(Color.WHITE); this.setSize(framewidth,frameheight); this.setResizable(false); this.setAlwaysOnTop(true); this.setVisible(true); this.createBufferStrategy(2); } private void _initStrategy() { this.strategy = this.getBufferStrategy(); this.g = (Graphics2D) this.strategy.getDrawGraphics(); } private void _initListener() { this.addKeyListener(new java.awt.event.KeyAdapter() { public void keyPressed(KeyEvent evt) { int code = evt.getKeyCode(); switch (code) { case KeyEvent.VK_LEFT: leftDown = true; break; case KeyEvent.VK_RIGHT: rightDown = true; break; case KeyEvent.VK_UP: upDown = true; break; case KeyEvent.VK_DOWN: downDown = true; break; default: ; } } public void keyReleased(KeyEvent evt) { int code = evt.getKeyCode(); switch (code) { case KeyEvent.VK_LEFT: leftDown = false; break; case KeyEvent.VK_RIGHT: rightDown = false; break; case KeyEvent.VK_UP: upDown = false; break; case KeyEvent.VK_DOWN: downDown = false; break; default: ; } } public void keyTyped(KeyEvent keyevent) { int code = keyevent.getKeyChar(); switch(code) { case KeyEvent.VK_ESCAPE: running = false; default: ; } } }); } }
Ich lese im main die dimensionen vom Frame und vom Objekt ein. Im Konstruktor
initialisiere ich diese.Danach rufe ich die Funktion _initWindow(); in welcher das JFrame erstellt wird
Danach wird im Main() der Thread runner gestartet - jedoch wird das JFrame
nicht korrekt gezeichnet.Bitte um hilfe (ich glaub es is nur nen kleiner Fehler und ich hab lediglich
ein Brett vorm Kopf).Gruß
ITEDVO
-
Schau dir mal genau an, welche Werte du in welcher Reihenfolge dem Konstruktor von Java2DPixelrennen übergibst.
-
Ich sagte doch, ich hab ein Brett vorm Kopf -.-
Danke, jetzt fällts mir erst auf...
So ein Fehler is mir seit 4 Jahren nicht mehr unterlaufen, schlimm, ich
werd langsam altWobei, mit Java arbeite ich erst seit einem Jahr und davor lediglich C - aber dennoch
is dass schon etwas peinlich