2017-06-11 5 views
-5

Ich möchte Bilder entsprechend dem Rahmen und der Breite des JFrames anzeigen, so dass die Bilder entsprechend der Größe des Rahmens proportional angezeigt werden (mein Programm ist so ausgelegt dass es unmöglich ist, einen der Layout-Manager zu verwenden).Warum gibt Frame.Width und Frame.Height sehr falsche Werte zurück

Wenn ich jedoch versuche, Bilder entsprechend den Parametern frame.width und frame.height anzuzeigen, werden die Bilder oben links im JFrame angezeigt. Auch print-Anweisungen, die frame.width und frame.height enthalten, geben Werte von 1 bzw. 2 zurück. Wie ist das möglich? Ich habe den Code unten gesetzt.

(Auch ich entschuldige mich für die seltsame Einrückung, aber ich habe eine Menge Schwierigkeiten, den Code auf dieser Seite richtig angezeigt zu bekommen. Ich muss die Leertaste einiger Zeilen 4mal manuell drücken, obwohl ich es weiß war der richtige Einzug in meinem Code, und wenn ich das tue, wird es in der Codeansicht angezeigt, aber mit falschem Einzug).

public class ExperimentGame extends JPanel{ 

Image image; 

public ExperimentGame(){ 
    JFrame frame = new JFrame(); 
    SwingUtilities.isEventDispatchThread(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.add(this); 
    frame.pack(); 
    frame.setSize(500,500); //my edit 
    this.setBackground(Color.WHITE); 
    frame.setVisible(true); 
    try { 
     image = ImageIO.read(this.getClass().getResource("spaceship (0).png")); 
    } 
    catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    revalidate(); 
    repaint(); 
    System.out.println(Frame.WIDTH + " " + Frame.HEIGHT); 

} 

public void paintComponent(Graphics g){ 
    super.paintComponent(g); 
    g.drawImage(image, Frame.WIDTH, Frame.HEIGHT, null); 
} 
} 

public class ExperimentMain { 

public static void main(String[] args) { 
    ExperimentGame game = new ExperimentGame(); 
} 
} 
+2

'Frame.WIDTH'? Warum benutzt du das überhaupt? Und was versuchst du mit diesem Code zu erreichen? Einige Bildlinks wären nett. Auf diese Weise zeigen Sie übrigens keine Bilder mit proportionaler Breite an. –

+0

Lesen Sie meine Beschreibung oben, und Sie werden sehen. – jmao

+2

'public static final int WIDTH = 1;' und 'public static final int HEIGHT = 2;' sind Flags, die in der 'imageUpdate' Methode verwendet werden, ziemlich sicher, dass sie nicht tun, was Sie denken, sie sind - Hier lesen Sie die [JavaDocs] (https://docs.oracle.com/javase/8/docs/api/java/awt/Frame.html) wird sehr wichtig – MadProgrammer

Antwort

0

Was Sie nennen, ist ein statisches Feld von Imageobserver, das anzeigt, dass die Breite des Basisbild ist jetzt verfügbar und kann entnommen werden, was Sie wollen, ist

System.out.println(frame.getWidth() + " " + frame.getHeight()); 

Hinweis i Methode eines Rahmens nennen Objekt nicht statische Felder der Frame-Klasse

+0

Weiß nicht, wie ich das verpasst habe. Als ich die Änderung vorgenommen habe, erhalte ich immer noch genau das gleiche Ergebnis. – jmao

+0

Haben Sie diese Zeile auch geändert? G.drawImage (image, Frame.WIDTH, Frame.HEIGHT, null); – urag

+0

Warten Sie, ich habe den Code nicht richtig geändert und jetzt funktioniert es. Vielen Dank! – jmao

Verwandte Themen