IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Afficher une image dans un JScrollPane


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2008
    Messages : 19
    Par défaut Afficher une image dans un JScrollPane
    Bonjour,

    Je vais essayé d'explique le + clairement mon problème:

    Je dois réaliser un Puzzle, qui sera "fabriqué" à partir d'une image que l'on choisira dans l'explorer.

    J'ai une JFrame (la fenêtre principale) qui contient 2 JPanel.
    Celui de gauche contient 2 JScrollPane et 1 JPanel.

    Ce que je voudrais, c'est que dans un de ces 2 JscrollPane, l'image que l'on sélectionne s'affiche dans celui-ci.

    J'ai dans ma JFrame une barre de menu, qui permet d'accéder à une fenêtre (Popup) avec un bouton parcourir. Quand l'on clic sur ce JButton, un JFileChooser s'ouvre. Quand on clic sur un fichier image, le chemin de l'image s'affiche bien dans la zone de texte de la Popup, mais quand je clic sur OK, je ne sais pas comment afficher l'image dans le JScrollPane.

    Voici le code du JPanel dans lequel je souhaite insérer l'image:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    public class Image extends JScrollPane{
     
        public JScrollBar barreImageH;
        public JScrollBar barreImageV;
     
        public Image(){
     
            this.setBorder(BorderFactory.createLineBorder(Color.gray));
     
            barreImageH = new JScrollBar();
            barreImageH.setOrientation(0);
            barreImageV = new JScrollBar();
     
     
            this.setVerticalScrollBar(barreImageV);
            this.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
            this.setHorizontalScrollBar(barreImageH);
            this.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
     
        }
     
        /*public void Afficher(Icon icone){
     
            JPanel mon_image = new JPanel();
            JLabel label = new JLabel(icone);
            mon_image.add(label);
            mon_image.setVisible(true);*/
     }
    }
    Voici le code de ma fenêtre Popup:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    public class Popup extends JDialog{
     
        String titre;
        JTextField fichier;
        JTextField nbPieces;
        GridBagConstraints gridBagConstraints;
        JButton parcourir;
        JButton annuler;
        JButton OK;
        JTextArea texte1;
        JTextArea texte2;
        JLabel image;
        ImageIcon icon;
        JPanel mon_image;
        public PopupEcouteur e;
     
        public Popup(String titre){
     
            this.titre = titre;
            this.getContentPane().setBackground(Color.white);
            this.setVisible(true);
            this.setSize(400,300);
            this.setLayout(null);
     
     
            parcourir = new JButton("Parcourir");
            annuler = new JButton("Annuler");
            OK = new JButton("OK");
     
            //Centre la popup par rapport à l'écran
            this.setLocationRelativeTo(this.getParent());
            this.show();
            this.setTitle(titre);
     
            fichier = new JTextField("");
            fichier.setBackground(Color.white);
     
            fichier.setBounds(75, 100, 150, 20);
            this.add(fichier);
     
            nbPieces = new JTextField(6);
            nbPieces.setBackground(Color.white);
     
            nbPieces.setBounds(240,125,75,20);
            this.add(nbPieces);
     
            parcourir.setBounds(230,100,100,20);
            this.add(parcourir);
     
            annuler.setBounds(170,235,100,20);
            this.add(annuler);
     
            OK.setBounds(280,235,100,20);
            this.add(OK);
     
            JTextArea texte1 = new JTextArea();
            texte1.setBounds(125,80,160,15);
            texte1.append("Charger l'image à découper:");
            this.add(texte1);
     
            JTextArea texte2 = new JTextArea();
            texte2.setBounds(125,127,110,15);
            texte2.append("Nombre de pièces:");
            this.add(texte2);
     
            ImageIcon icon = new ImageIcon("icone.gif");
            JLabel img = new JLabel(icon);
            img.setBounds(0, 40, 150, 150);
            this.add(img);
     
     
            this.e = new PopupEcouteur(this);
            annuler.addMouseListener(e);
            OK.addMouseListener(e);
            parcourir.addMouseListener(e);
     
            }
     
        public JButton getAnnuler() {
            return annuler;
        }
     
        public void setParcourir(JButton annuler) {
            this.annuler = annuler;
        }
     
        public JButton getParcourir() {
            return parcourir;
        }
     
        public void setOuvrir(JButton parcourir) {
            this.parcourir = parcourir;
        }
     
        public JButton getOK(){
            return OK;
        }
     
        public void setOK(JButton OK) {
            this.OK = OK;
        }
     
    }
    Et voici le code de mon écouteur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    public class MenuEcouteur extends MouseAdapter{
     
     
        private Menu menu;
        Popup popup;
     
        public MenuEcouteur(Menu menu){
            this.menu=menu;
        }
     
     
     
        public void mousePressed(MouseEvent e) {        
            if(e.getSource().equals(menu.getQuitter())){
                System.exit(0);
            }
     
            if(e.getSource().equals(menu.getOuvrir())){
                popup = new Popup("Choix de l'image et du nombre de pièces");
     
            }
     
        }
     
     
    }
    Je sais c'est très long, mais j'vois pas tellement comment expliquer ça clairement sans montrer le code.

  2. #2
    Membre expérimenté Avatar de uhrand
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 203
    Par défaut
    Citation Envoyé par poustiquette Voir le message
    quand je clic sur OK, je ne sais pas comment afficher l'image dans le JScrollPane.
    Il faut que le contrôleur connaisse la vue. Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    import java.awt.*;
    import java.awt.event.*;
    import java.io.*;
    import javax.swing.*;
    import javax.imageio.*;
    public class PictureDemo extends JFrame {
        private final Picture picture;
        private final JFileChooser chooser;
        private final Controller controller;
        public PictureDemo() {
            super("Picture Demo");
            setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            setSize(800, 600);
            setLocationRelativeTo(null);
            chooser = new JFileChooser();
            picture = new Picture();
            controller = new Controller(this);
            setJMenuBar(new PictureMenuBar(controller));
            add(new JScrollPane(picture));
        }
        public void openPicture() throws IOException {
            chooser.showOpenDialog(this);
            File file = chooser.getSelectedFile();
            if (file != null) {
                Image image = ImageIO.read(file);
                picture.setImage(image);
            }
        }
        public static void main(final String[] args) {
            Runnable gui = new Runnable() {
     
                public void run() {
                    new PictureDemo().setVisible(true);
                }
            };
            //GUI must start on EventDispatchThread:
            SwingUtilities.invokeLater(gui);
        }
    }
    class Picture extends JPanel implements Scrollable {
        private Image image;
        private int width, height;
        @Override
        public Dimension getPreferredSize() {
            Dimension size = super.getPreferredSize();
            size.width = width;
            size.height = height;
            return size;
        }
        @Override
        protected void paintComponent(final Graphics g) {
            super.paintComponent(g);
            g.drawImage(image, 0, 0, this);
        }
        public void setImage(final Image img) {
            this.image = img;
            width = img.getWidth(this);
            height = img.getHeight(this);
            revalidate();
            repaint();
        }
        public Dimension getPreferredScrollableViewportSize() {
            return getPreferredSize();
        }
        public int getScrollableUnitIncrement(final Rectangle visibleRect,
                final int orientation, final int direction) {
            return 100;
        }
        public int getScrollableBlockIncrement(final Rectangle visibleRect,
                final int orientation, final int direction) {
            return 200;
        }
        public boolean getScrollableTracksViewportWidth() {
            return false;
        }
        public boolean getScrollableTracksViewportHeight() {
            return false;
        }
    }
    class Controller implements ActionListener {
        PictureDemo view;
        public Controller(final PictureDemo view) {
            super();
            this.view = view;
        }
        public void actionPerformed(final ActionEvent evt) {
            if (evt.getActionCommand().equals("open")) {
                try {
                    view.openPicture();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        }
    }
    class PictureMenuBar extends JMenuBar {
        private final JMenu menuFile;
        private final JMenuItem miOpen;
        public PictureMenuBar(Controller controller) {
            menuFile = new JMenu("File");
            miOpen = new JMenuItem("Open...");
            miOpen.setActionCommand("open");
            menuFile.add(miOpen);
            add(menuFile);
            miOpen.addActionListener(controller);
        }
    }

Discussions similaires

  1. Afficher une image dans un état
    Par Invité1 dans le forum IHM
    Réponses: 8
    Dernier message: 23/09/2009, 14h59
  2. comment afficher une image dans un jpanel ?
    Par 180degrés dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 18/04/2006, 15h33
  3. Afficher une image dans un état
    Par louis_figos dans le forum IHM
    Réponses: 5
    Dernier message: 09/03/2006, 11h09
  4. Besoin d'aide pour afficher une image dans un applet
    Par argon dans le forum AWT/Swing
    Réponses: 16
    Dernier message: 19/01/2006, 19h45
  5. [Stratégie] Afficher une animation dans un JScrollPane
    Par patmaba dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 11/10/2005, 09h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo