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 alt 😮

    Wobei, mit Java arbeite ich erst seit einem Jahr und davor lediglich C - aber dennoch
    is dass schon etwas peinlich 🙄


Anmelden zum Antworten