Discussion: Minimiser un JFrame

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    novembre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2017
    Messages : 6
    Points : 3
    Points
    3

    Par défaut Minimiser un JFrame

    Bonsoir,
    je suis entrain de développer une application en java. Dans cette application je voudrais pouvoir ajouter des Jframe contenant des JTextarea que je voudrais sauvegarder su le JPanel en tant qu'image et a chaque fois que je clic sur une des images cela me sortira le dialog avec le commentaire déjà écrit. J'ai essayé de travailler avec JDialog mais le minimiser je ne sais pas comment faire. Le code que j'ai écrit pour l'instant:

    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
    public class CommentDialog extends JFrame {
     
    	private JTextArea textArea = new JTextArea();
    	private JScrollPane scrollpane ;
    	private JButton button1,button2;
     
    	public CommentDialog() {
    		addnewComment();
    	}
     
    	public void addnewComment()
    	{	
    		removeMinMaxClose(this);
    		setUndecorated(true);
    		setDefaultLookAndFeelDecorated( false );
    		JPanel pane = new JPanel(new GridLayout());
    		button1 = new JButton(minimizeAction);
    		button1.setMargin(new Insets(0, 0, 0, 0));
    		button2 = new JButton(exitAction);
    		button2.setMargin(new Insets(0, 0, 0, 0));
    		pane.add(button1);
    		pane.add(button2);
    		getRootPane().setWindowDecorationStyle(JRootPane.QUESTION_DIALOG);
    		scrollpane = new JScrollPane(textArea);
    		scrollpane.setToolTipText(textArea.getText());
    		setSize(new Dimension(150,100));
    		setTitle("Commentaire");
    		setType(Type.UTILITY);
    		setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
    		add(pane, BorderLayout.NORTH);
    		add(scrollpane);
    		revalidate();
    	}
     
    	public void removeMinMaxClose(Component comp)
    	  {
    	    if(comp instanceof AbstractButton)
    	    {
    	      comp.getParent().remove(comp);
    	    }
    	    if (comp instanceof Container)
    	    {
    	      Component[] comps = ((Container)comp).getComponents();
    	      for(int x = 0, y = comps.length; x < y; x++)
    	      {
    	        removeMinMaxClose(comps[x]);
    	      }
    	    }
    	  }
     
    	private final Action exitAction = new AbstractAction("", new ImageIcon(getClass().getClassLoader().getResource("resources/Icons/close.png")))
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                dispose();
            }
        };
    private final Action minimizeAction = new AbstractAction("", new ImageIcon(getClass().getClassLoader().getResource("resources/Icons/minimize.png")))
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                setState(JFrame.ICONIFIED);
            }
        };
     
    	public String getComment() {
    		return textArea.getText();
    	}
     
    }

    et j active le mouselistener que apres avoir cliquer sur un button

    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
    static MouseAdapter mouseListener = new MouseAdapter() {
        	public void mousePressed(MouseEvent e) {
        		if( e.getButton()==MouseEvent.BUTTON1 && e.getClickCount()==2) {
        			Point p = e.getPoint();
        			SwingUtilities.convertPointToScreen(p, com.pdfapp.QHG.PDFJFrame.m_viewerComponentPanel);
        			showDialog(p,com.pdfapp.QHG.PDFJFrame.frame);
        		}
        	}
     
     
        };
     
        private static void showDialog(Point point, JFrame frame) {
    		if ( commentDialog!=null ) {
    			commentDialog.dispose();
    		}
    		List<CommentDialog> liste = new ArrayList<>();
    		commentDialog=new CommentDialog();
    		commentDialog.addnewComment();
    		//liste.add(commentDialog);
    		commentDialog.setLocation(point.x-commentDialog.getWidth()/2, point.y-commentDialog.getHeight()/2);
    		CommentDialog thisCommentDialog = commentDialog;
    		liste.add(thisCommentDialog);
    		commentDialog.addWindowListener(new WindowAdapter() {
    			@Override
    			public void windowClosing(WindowEvent e) {
    				String comment = thisCommentDialog.getComment();
    				thisCommentDialog.dispose();
    				JOptionPane.showMessageDialog(frame, "Le commentaire saisi : " + comment);
    			}
    		});
    		commentDialog.setVisible(true);
     
    	}
    Action du bouton lors du clic le mouselistener se met en marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    com.pdfapp.QHG.PDFJFrame.ppane.addMouseListener(mouseListener);

    Ce que je veux c'est pouvoir à chaque double clic de la souris ajouter au frame un commentdialog et en le réduisant ça s'enregistre en tant qu'icone sur le jpanel. Merci pour votre aide !! Je débute Java et surtout le AWT/SWING !

  2. #2
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    novembre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2017
    Messages : 6
    Points : 3
    Points
    3

    Par défaut

    J'ai reussi a le faire avec un jdesktoppane et une jinternalframe mais j'ai toujours le problème d'ajout d'une nouvelle jinternalframe au panel en sauvegardant l'ancienne. je ne sais pas comment m'y prendre.

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java/Eclipse RCP
    Inscrit en
    septembre 2009
    Messages
    10 399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java/Eclipse RCP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2009
    Messages : 10 399
    Points : 24 899
    Points
    24 899
    Billets dans le blog
    2

    Par défaut

    Salut,
    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
     
        private static void showDialog(Point point, JFrame frame) {
    		if ( commentDialog!=null ) {
    			commentDialog.dispose();
    		}
    		List<CommentDialog> liste = new ArrayList<>();
    		commentDialog=new CommentDialog();
    		commentDialog.addnewComment();
    		//liste.add(commentDialog);
    		commentDialog.setLocation(point.x-commentDialog.getWidth()/2, point.y-commentDialog.getHeight()/2);
    		CommentDialog thisCommentDialog = commentDialog;
    		liste.add(thisCommentDialog);
    		commentDialog.addWindowListener(new WindowAdapter() {
    			@Override
    			public void windowClosing(WindowEvent e) {
    				String comment = thisCommentDialog.getComment();
    				thisCommentDialog.dispose();
    				JOptionPane.showMessageDialog(frame, "Le commentaire saisi : " + comment);
    			}
    		});
    		commentDialog.setVisible(true);
     
    	}
    Dans le code précédent, tu crées une nouvelle instance de ArrayList, à chaque appel de showDialog. Ça ne sert strictement à rien. La liste n'existe plus à la fin de l'exécution de la méthode. Si tu veux pouvoir cumuler, ta liste doit exister en dehors de la méthode, en variable statique en l’occurrence, puisque ta méthode est statique.

    Citation Envoyé par qolaby Voir le message
    Ce que je veux c'est pouvoir à chaque double clic de la souris ajouter au frame un commentdialog et en le réduisant ça s'enregistre en tant qu'icone sur le jpanel. Merci pour votre aide !! Je débute Java et surtout le AWT/SWING !
    Ce n'est pas infaisable, mais c'est un peu compliqué pour un débutant, parce qu'un JPanel et des JDialog, ce n'est pas vraiment fait pour ça à la base. Un dialogue ce n'est pas prévu pour être réduit à une icône, encore moins dans un JPanel. Il faut donc simuler tout ça.
    Tu devrais plutôt considérer que si on ferme un dialogue, on sauvegarde le dialogue, soit le message et les coordonnées du dialogue (par exemple dans une liste), on ajoute une icône dans un composant pour afficher des icônes, et que le clic sur l'icône va réafficher le dialogue à partir de ce qui a été sauvegardé.

    Le faire avec un JDesktopPane est une autre solution, mais c'est pareil, ce n'est pas fait pour ça à la base. En revanche, ça gère en interne la liste de JInternalFrame. Si tu arrives à en ouvrir une, je ne vois pas comment tu n'arriverais pas en ouvrir d'autres, puisque c'est exactement pareil.

    En revanche, quand tu dis "j'ai toujours le problème d'ajout d'une nouvelle jinternalframe au panel en sauvegardant l'ancienne.", c'est bizarre. Il n'y a rien à faire de spécial : à partir du moment où un JInternalFrame existe, tu peux en ouvrir une autre, la première n'a pas besoin d'être sauvegardée. En revanche l'utilisateur peut la fermer quand il veut, et donc elle sera perdue à ce moment : il faut donc l'empêcher de la fermer si tu veux la garder.

    ça pourrait donner un truc comme ça :

    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
    public class InternalFrameDemo {
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame();
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		JDesktopPane pane = new JDesktopPane();
    		frame.add(pane);
     
    		pane.addMouseListener(new MouseAdapter() {
    			@Override
    			public void mouseClicked(MouseEvent e) {
    				createInternalFrame(pane,e.getPoint()); 
    			}
    		});
     
     
    		frame.setSize(600, 400);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
     
    	private static AtomicInteger ID = new AtomicInteger();
    	private static void createInternalFrame(JDesktopPane pane, Point point) {
    		JInternalFrame frame = new JInternalFrame("Fenêtre " + ID.incrementAndGet(), true, false, false);
    		frame.setSize(100, 50);
    		frame.setLocation(point.x-frame.getWidth()/2, point.y-frame.getHeight()/2);
    		frame.setMaximumSize(new Dimension(100,50));
    		frame.setIconifiable(true);
    		pane.add(frame);
    		frame.setVisible(true);
    	}
    }
    Mais, ça ne correspondra pas forcément à ce que tu cherches à faire exactement, parce que ce n'est pas fait pour ça à la base.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Ouvrir nouvelle JFrame sans minimiser la précédente
    Par Arislas dans le forum Fenêtres/Dialogues
    Réponses: 17
    Dernier message: 13/04/2015, 16h58
  2. Plusieurs petites fenêtres minimisables dans une JFrame
    Par nassima_1418 dans le forum Fenêtres/Dialogues
    Réponses: 5
    Dernier message: 17/07/2013, 17h13
  3. restaurer une jframe minimiser
    Par dearraed dans le forum Fenêtres/Dialogues
    Réponses: 1
    Dernier message: 20/08/2010, 17h51
  4. [JFrame] minimiser JFrame
    Par hamiding10 dans le forum Fenêtres/Dialogues
    Réponses: 1
    Dernier message: 30/05/2008, 15h29
  5. JFrame - supprimer les boutons pour minimiser et agrandir
    Par Casp dans le forum Fenêtres/Dialogues
    Réponses: 3
    Dernier message: 27/07/2006, 17h58

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