Swing Bildervorschau

Status
Nicht offen für weitere Antworten.

skizZ

Aktives Mitglied
Hallo zusammen,

ich bastele gerade an einem Fotoalbum in Java mit Swing und bin schon so weit, dass ich die Bilder auswählen, abspeichern(werden fortlaufend nummeriert) und eine entsprechende HTML Seite erstellen kann.

Nun habe ich folgendes vor:
Beim Start des Programmes soll nun unter dem Feld Kommentar(siehe anhang)
eine Bildvorschau angezeigt werden, durch die mal nach links und rechts scrollen kann und sich ein Bild beim anklicken in die Mitte verschiebt und die nächsten Bilder nachrücken.

Welches Swing Element sollte ich dafür benutzen bzw. wie setzt ich das allgemein um?
 

André Uhres

Top Contributor
Ein JPanel (z.B. mit preferredSize entsprechend der Bilderzahl), eingebettet in einem JScrollPane. In das JPanel kommen die Bilder. Jedes Bild ist eine anklickare Komponente (JPanel/JComponent mit setFocusable(true) und addMouseListener(..)). Bei mouseReleased wird das Bild mit scrollRectToVisible entsprechend der Grösse des visibleRect in die Mitte geschoben.
 

skizZ

Aktives Mitglied
Hallo,

danke für die Antwort.
Kannst du mir dazu evtl ein kleines Beispiel geben?
Bin noch Anfänger.
 

André Uhres

Top Contributor
Kannst du mir dazu evtl ein kleines Beispiel geben?
Java:
/*
 * PicturesDemo.java
 *
 */

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;

public class PicturesDemo extends JFrame {

    private JScrollPane scroller;
    private JPanel showPanel;
    private JPanel selected;
    private Random r = new Random();

    public PicturesDemo() {
        super("PicturesDemo");
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(700, 350);
        setLocationRelativeTo(null);
        scroller = new JScrollPane();
        showPanel = new JPanel();
        scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
        scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
        scroller.setPreferredSize(new Dimension(0, 180));
        scroller.getHorizontalScrollBar().setUnitIncrement(155);
        scroller.setViewportView(showPanel);
        getContentPane().add(scroller, BorderLayout.PAGE_END);
        for (int i = 0; i < 20; i++) {
            addImage();
        }
    }

    private void addImage() {
        JPanel img = new JPanel();
        img.setPreferredSize(new Dimension(150, 150));
        img.setBackground(new Color(r.nextInt(256), r.nextInt(256), r.nextInt(256)));
        img.setFocusable(true);
        img.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseReleased(final MouseEvent e) {
                select((JPanel) e.getSource());
            }
        });
        showPanel.add(img);
    }

    private void select(final JPanel img) {
        if (selected != null) {
            selected.setBorder(null);
        }
        img.setBorder(BorderFactory.createLineBorder(Color.BLACK, 4));
        selected = img;
        Rectangle showRect = showPanel.getVisibleRect();
        int w = showRect.width;
        Rectangle imgRect = img.getBounds();
        imgRect.x -= (w / 2 - imgRect.width / 2);
        imgRect.width = w;
        showPanel.scrollRectToVisible(imgRect);

    }

    public static void main(final String[] args) {
        Runnable gui = new Runnable() {

            public void run() {
                new PicturesDemo().setVisible(true);
            }
        };
        //GUI must start on EventDispatchThread:
        SwingUtilities.invokeLater(gui);
    }
}
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben