2016-04-19 3 views
0

Es sollte wahrscheinlich eine Selbstverständlichkeit sein, aber ich bin ziemlich neu zu schwingen.scala.swing: Versuchen Sie, Bilder auf Fenstergröße zu skalieren, aber die Größe gibt 0 zurück

Ich versuche, eine einfache kleine Sache zu machen, die zwei Bilder nebeneinander anzeigen wird, so groß wie das Fenster erlauben wird.

In der Theorie, was passiert ist:

  • wir ImageIcon bekommen, in diesem Fall 001.jpg.

  • Wir berechnen das Verhältnis von Breite/Höhe des ImageIcon.

  • Wir machen die ImageIcon in ein Bild.

  • Wir drehen dieses Bild in ein neues Bild in der richtigen Größe.

  • Wir machen dieses Bild wieder zu einem Bildsymbol.

Dies alles zusammenbricht, weil der einzige Weg, die ich gefunden habe ist die Fenstergröße erhalten size, aber das hält Rückkehr 0s.

Dies ist der Code, den ich jetzt habe:

class UI extends MainFrame { 
    title = "Matt's window header" 
    preferredSize = new Dimension(1920, 1080) 
    var imageIcon = new ImageIcon("001.jpg") 
    val imgRatio = imageIcon.getIconWidth.toDouble/imageIcon.getIconHeight.toDouble 
    println(size) 
    pack() 
    println(imgRatio) 
    val image = imageIcon.getImage() 
    val newimg = image.getScaledInstance(size.width, (size.width * imgRatio.toInt), java.awt.Image.SCALE_SMOOTH) 
    imageIcon = new ImageIcon(newimg) 
    contents = new Label { 
     icon = imageIcon 
    } 
} 

Als Nebenwirkung, wäre es toll, wenn mir jemand Informationen darüber geben könnte, wie ein anderes Bild zu laden, anstatt nur 001.jpg.

Antwort

0

size wird nicht an dem Punkt ermittelt, an dem Sie darauf zugreifen. Jedoch ist preferredSize ist. Wenn Sie println(preferredSize) hinzufügen, erhalten Sie die Dimensionen, die Sie gerade festgelegt haben.

+0

Danke! Was ist der beste Weg zu sagen, welche Größe das Fenster dann ist? Ich möchte nicht davon ausgehen, dass das Fenster eine bevorzugte Größe hat. – Jones

Verwandte Themen