2017-12-22 9 views
0

Ich möchte ein Bild zu einem ScrollPane (in einem Panel) und das Bild auf die Breite des Panels einstellen.Setzen Sie ein Bild auf ein ScrollPane und skalieren Sie es nach Breite

Ich benutze ein JLabel, um das Bild zu setzen und das Etikett in eine ScrollPane, weil das Bild größer sein kann.

Ich möchte das Bild auf die Breite des Panels skalieren, die Höhe sollte gleich sein.

Hier ist mein Code (wo pInfo mein JPanel ist das Bild hinzugefügt werden):

BufferedImage image; 
JLabel picLabel = new JLabel(); 
int w = pInfo.getWidth(); 

pInfo.removeAll(); 
try { 
    image = ImageIO.read(getClass().getResourceAsStream("/Matrix/ausstoepseln.jpg")); 
    picLabel = new JLabel(new ImageIcon(image));          
} catch (IOException e1) { 
    e1.printStackTrace(); 
} 

JScrollPane scrollP = new JScrollPane (picLabel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 
scrollP.setBorder(new TitledBorder (new EtchedBorder(), "Info")); 
pInfo.add(scrollP); 

Das Problem ist, dass der ScrollPane eine vertikale ScrollBar bekommt, die ein wenig von den Bildeinblendungen. Die Größenänderung des Bildes (von ImgSclr oder Graphic2D) funktioniert nicht, weil das ScrollPane auch kürzer ist. Es wurde auch versucht, die Beschriftung hinzuzufügen und anschließend die Grenzen des ScrollPane festzulegen, aber auch nicht.

enter image description here

Gibt es eine Möglichkeit, dies zu tun?

Antwort

0

Check out:

  1. Scrollable Panel. Auf diese Weise können Sie die Breite der Komponente add für die Bildlaufleiste auf die Breite des Ansichtsfensters festlegen.

  2. Stretch Icon. Dadurch kann die Größe des Symbols geändert werden, um den verfügbaren Platz zu füllen. Sie können das gleiche Verhältnis beibehalten.

So sollten Sie in der Lage sein, nur Ihre JLabel zum JScrollPane hinzufügen und das Bild automatisch verkleinert werden, da die Größe des scrollpane geändert wird.

+0

thx, hört sich gut an, ich werde es versuchen. – Cauti

+0

Unorthodox bekomme ich es nicht zur Arbeit. Die StretchIcon scheint das Bild nicht zu laden. Code ist wie oben, außer den folgenden Änderungen: 'picLabel.setIcon (new StretchIcon (image)); ScrollablePanel scrollP = neues ScrollablePanel (neues MigLayout ("", "[100%, grow]", "100%, grow")); scrollP.add (Bildbezeichnung); pInfo.add (scrollP); ' Der Ausgang ist leer. Wenn ich ImageIcon verwende, wird das Bild angezeigt, aber wegen des ScrollablePanels hat es seine wahre Größe. – Cauti

+0

Verwenden Sie nicht MigLayout. Ein einfaches BorderLayout genügt. Wie auch immer, nur festgestellt, dass die StretchIcon, Größe mit "proportional Sizing" nicht größer wird. Also wird diese Lösung wahrscheinlich nicht funktionieren. – camickr

Verwandte Themen