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

Agents de placement/Fenêtres Java Discussion :

Accès à une JDialog bloqué à cause d'un setModal()


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut Accès à une JDialog bloqué à cause d'un setModal()
    Bonjour,

    J'ai un petit souci. J'ai une JDialog, que nous appellerons JDialog1, qui est modale (setModal(true)). A partir de cette JDialog, j'aimerai ouvrir une autre JDialog (JDialog2) contenant une aide pour l'utilisateur.

    Le problème est que comme JDialog1 est modale, je ne peux pas capter les événements souris sur la 2ème fenêtre (même en la passant modale elle aussi).
    Or j'ai un JScrollPane dans JDialog2 et j'aimerais pouvoir utiliser les ascenceurs...

    Comment rendre l'accès à ma JDialog2 possible?

    Merci.

  2. #2
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Bonjour,
    je ne comprends pas pourquoi tu as un problème. A partir du moment où JDialog2 est visible à l'écran, c'est elle qui récupère les événements souris.

  3. #3
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Malheureusement non...
    La 2ème est visible, mais elle ne répond pas aux événements souris...
    J'ai testé en l'affichant seule, sans la 1ère fenêtre modale, et tout marche nickel, mais quand je l'affiche par dessus la 1ère fenêtre modale, ça ne répond plus...
    Et si je ferme la 1ère fenêtre modale, alors les événements souris sont captés par ma 2ème fenêtre.

  4. #4
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Tu peux poster un peu de code pour y voir plus clair parce que chez moi ça marche.

  5. #5
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    JDialog1 :
    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
     
    public class FormulaCalculatorDialog extends JDialog {
    	private String formula = new String();
    	private JTextField formulaText = new JTextField();
    	private boolean isOk = false;
     
     
    	public FormulaCalculatorDialog() throws HeadlessException {
    		formula = "";
     
    		setTitle("Définition d'une formule mathématique");
    		setModal(true);
    		setResizable(false);
    		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
     
    		//**** Menu Bar : save + help
    		JMenuBar menuBar = new JMenuBar();
     
    		JMenu helpMenu = new JMenu();
    		helpMenu.setText("?");
    		JMenuItem helpItem = new JMenuItem();
    		helpItem.setText("Syntaxe");
    		helpItem.addActionListener((new ActionListener() {
    			public void actionPerformed(ActionEvent ae) {
    				helpItem_actionPerformed(ae);
    			}
    		}));
    		helpMenu.add(helpItem);
     
    		menuBar.setVisible(true);
    		menuBar.add(helpMenu);
    		menuBar.setName("menuBar");
    		setJMenuBar(menuBar);
     
    		helpMenu.setVisible(true);
     
    		[...]
     
    		this.pack();
    	}
     
    	private void helpItem_actionPerformed(ActionEvent ae){
    		this.setModal(false);
          // ma 2ème JDialog
    		HelpSyntax help = new HelpSyntax();
    	}
    JDialog2 :
    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
     
    public class HelpSyntax extends JDialog {
     
     
    	public HelpSyntax(){
    		setTitle("Syntaxe");
    		setSize(100, 130);
     
    		//JFrame.setDefaultLookAndFeelDecorated(true);
     
    		//Create and set up the window.
    		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
     
    		// Create text area
    		JTextArea textArea = new JTextArea();//35,130
    		textArea.setEditable(false);
    		textArea.setText("Syntaxe pour l'écriture de formules :\n\n" + [color=orange][...] du texte sur plus de lignes que la taille de la fenêtre[/color]);
     
    		//le JScrollPane qu'on ne peut pas utiliser
    		JScrollPane scrollPane = new JScrollPane(textArea);
    		int width = (int)Toolkit.getDefaultToolkit().getScreenSize().getWidth()/2;
    		int height = (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight()/2;
    		scrollPane.setPreferredSize(new Dimension(width, height));
    		scrollPane.setRequestFocusEnabled(true);
    		scrollPane.setWheelScrollingEnabled(true);
     
    		// the layout
    		getContentPane().setLayout(new BorderLayout());		
    		getContentPane().add(scrollPane,BorderLayout.CENTER);
     
    		//Display the window.
    		setResizable(true);
    		setVisible(true);
    		setEnabled(true);
    		setModal(true);
    		pack();
    		setLocation(Dialog.getCenterPosition(this));
    	}
    }
    Voilà...
    Donc quand tu affiches JDialog2, elle est bien active, mais on ne peut pas utiliser les ascenceurs (événements souris non-captés).
    D'ailleurs, tu le vois aussi parce que tu ne peux pas sélectionner le texte en faisant du cliquer-glisser...

  6. #6
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    qq remarques ci-dessous, je ne suis pas sûr que ça va tout régler mais c'est plus conforme à ce qui doit être fait.
    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
     
    public class FormulaCalculatorDialog extends JDialog {
    	private String formula = new String(); // initialisation inutile
    	private JTextField formulaText = new JTextField();
    	private boolean isOk = false;
     
     
    	public FormulaCalculatorDialog() throws HeadlessException {
    		formula = "";
     
    		// les 2 lignes suivantes peuvent être remplacées par
    		// super("Définition d'une formule mathématique", true);
    		setTitle("Définition d'une formule mathématique"); 
    		setModal(true);
    		setVisible(true); // à déplacer plus bas une fois que le JDialog est construit
    		setEnabled(true); // inutile
    		setResizable(false);
    		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
     
    		//**** Menu Bar : save + help
    		JMenuBar menuBar = new JMenuBar();
     
    		JMenu helpMenu = new JMenu();
    		helpMenu.setText("?");
    		JMenuItem helpItem = new JMenuItem();
    		helpItem.setText("Syntaxe");
    		helpItem.addActionListener((new ActionListener() {
    			public void actionPerformed(ActionEvent ae) {
    				helpItem_actionPerformed(ae);
    			}
    		}));
    		helpMenu.add(helpItem);
     
    		menuBar.setVisible(true); // inutile
    		menuBar.add(helpMenu);
    		menuBar.setName("menuBar");
    		setJMenuBar(menuBar);
     
    		helpMenu.setVisible(true); // inutile
     
    		[...]
     
    		this.pack();
    		// ici mettre setVisible(true);
    	}
     
    	private void helpItem_actionPerformed(ActionEvent ae){
    		this.setModal(false); // pourquoi ?
          // ma 2ème JDialog
    		HelpSyntax help = new HelpSyntax();
    	}
    JDialog2 :
    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
     
    public class HelpSyntax extends JDialog {
     
     
    	public HelpSyntax(){
                                    // même remarque que ci-dessus utiliser super(...)
    		setTitle("Syntaxe");
    		setSize(100, 130);
     
    		//JFrame.setDefaultLookAndFeelDecorated(true);
     
    		//Create and set up the window.
    		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
     
    		// Create text area
    		JTextArea textArea = new JTextArea();//35,130
    		textArea.setEditable(false);
    		textArea.setText("Syntaxe pour l'écriture de formules :\n\n" + [color=orange][...] du texte sur plus de lignes que la taille de la fenêtre[/color]);
     
    		//le JScrollPane qu'on ne peut pas utiliser
    		JScrollPane scrollPane = new JScrollPane(textArea);
    		int width = (int)Toolkit.getDefaultToolkit().getScreenSize().getWidth()/2;
    		int height = (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight()/2;
    		scrollPane.setPreferredSize(new Dimension(width, height));
    		scrollPane.setRequestFocusEnabled(true);
    		scrollPane.setWheelScrollingEnabled(true);
     
    		// the layout
    		getContentPane().setLayout(new BorderLayout());		
    		getContentPane().add(scrollPane,BorderLayout.CENTER);
     
    		//Display the window.
    		setResizable(true);
    		setVisible(true); // déplacer plus bas
    		setEnabled(true); // inutile
    		setModal(true); // voir plus haut
    		pack();
    		setLocation(Dialog.getCenterPosition(this));
    		// ici mettre setVisible(true);
    	}
    }

  7. #7
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Je venais d'éditer le code que j'ai posté... Les setEnabled() et setVisible() étaient des tests (qui donnaient un comportement erroné)

    Je teste avec les autres modifs, et je te donne le résultat...

  8. #8
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Bon ben ça marche...
    Merci beaucoup. Mais j'en reviens pas que le fait de déplacer un setVisible() puisse avoir autant d'effets... :

    Par contre, Eclipse me dit que le constructeur JDialog (String, boolean) est indéfini... (pour l'utilisation du super())

    Question subsidiaire : comment dire à un JScrollPane de placer ses scrollBars à l'origine? (pour afficher le début de mon texte d'aide et pas la fin)

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Points : 626
    Points
    626
    Par défaut
    Effectivement,
    http://java.sun.com/j2se/1.4.2/docs/api/java/awt/JDialog.html


    Citation Envoyé par API
    JDialog(Dialog owner, String title, boolean modal)
    Creates a modal or non-modal dialog with the specified title and the specified owner frame.


  10. #10
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Citation Envoyé par TabrisLeFol

    Euh oui, mais je recherche quoi???
    Parce que je regarde la Javadoc de JScrollPane, j'ai l'impression que c'est avec le setViewport() qu'on gère ça, mais j'arrive pas à le mettre en oeuvre...

    Je fais ç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
     
    JScrollPane scrollPane = new JScrollPane();
    		int width = (int)Toolkit.getDefaultToolkit().getScreenSize().getWidth()/2;
    		int height = (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight()/2;
    		scrollPane.setPreferredSize(new Dimension(width, height));
    		scrollPane.setWheelScrollingEnabled(true);
     
    		scrollPane.setViewportView(textArea);
    		scrollPane.getViewport().setViewPosition(new Point(1,1));
     
     
    		// the layout
    		getContentPane().setLayout(new BorderLayout());		
    		getContentPane().add(scrollPane,BorderLayout.CENTER);
    Mais mes scrollbars restent à la position du dernier caractère de mon JTextArea...

  11. #11
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    J'arrive vraiment pas à mettre les scrollbars dans la position d'origine...
    Voilà le code, si quelqu'un voit ce qui cloche, ça m'aiderait beaucoup :
    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
     
    public HelpSyntax(){
    		setTitle("Syntaxe");
    		setSize(100, 130);
     
    		//Create and set up the window.
    		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
     
    		// Create text area
    		JTextArea textArea = new JTextArea();//35,130
    		textArea.setEditable(false);
    		textArea.setText([...]);
     
    		JScrollPane scrollPane = new JScrollPane(textArea);
    		int width = (int)Toolkit.getDefaultToolkit().getScreenSize().getWidth()/2;
    		int height = (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight()/2;
    		scrollPane.setPreferredSize(new Dimension(width, height));
    		scrollPane.setWheelScrollingEnabled(true);
    		scrollPane.setOpaque(true);
    		scrollPane.getViewport().setViewPosition(new Point(0,0));
    //		scrollPane.setViewportView(textArea);
    //		scrollPane.getViewport().setViewPosition(new Point(1,1));
     
    		// the layout
    		getContentPane().setLayout(new BorderLayout());		
    		getContentPane().add(scrollPane,BorderLayout.CENTER);
     
    		//Display the window.
    		setResizable(true);
    		setModal(true);
    		pack();
    		setLocation(Dialog.getCenterPosition(this));
    		setVisible(true);
    	}

  12. #12
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Essaie en changeant la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scrollPane.setPreferredSize(new Dimension(width, height));
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    textArea.setPreferredSize(new Dimension(width, height));

  13. #13
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Ben j'ai plus les scrollbars si je fais ça...
    Ca commence à me prendre le chou ces siouxeries

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Points : 475
    Points
    475
    Par défaut
    Bonjour,

    Pour placer les barres de défilement à l'origine du texte, as-tu essayé tout simplement de mettre le curseur du JTextArea à cet endroit ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myJTextArea.setCaretPosition(0);
    Chez moi, ça marche.

    Nicolas

  15. #15
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Je viens d'essayer avec un JLabel et ça marche bien, je ne vois pas ce qui se passe avec un JTextArea. En dernier ressort, à la place de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scrollPane.getViewport().setViewPosition(new Point(0,0));
    tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    textArea.setCaretPosition(0);

  16. #16
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Citation Envoyé par Nicolas_75
    Bonjour,

    Pour placer les barres de défilement à l'origine du texte, as-tu essayé tout simplement de mettre le curseur du JTextArea à cet endroit ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myJTextArea.setCaretPosition(0);
    Chez moi, ça marche.

    Nicolas
    Effectivement, ça marche...
    Ca me *§µ%$¤ d'avoir bataillé autant juste pour ça.

    Merci à tous!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Accès à une table bloquée si trigger
    Par egautier18 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 16/10/2013, 08h48
  2. Accès à un JDialog à partir d'une classe extends AbstractAction
    Par Orely dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 21/03/2009, 04h54
  3. Refus d'accès à une base Firebird
    Par severine dans le forum Installation
    Réponses: 18
    Dernier message: 04/06/2003, 16h03
  4. [Dev-C++] Accès à une base MySQL
    Par Beetlejuice dans le forum Dev-C++
    Réponses: 8
    Dernier message: 08/05/2003, 13h17
  5. Accès à une application ouverte (OLE Automation ?)
    Par PascalB dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/06/2002, 14h39

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