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 :

Affichage combobox dans une boite de dialogue


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 15
    Par défaut Affichage combobox dans une boite de dialogue
    Bonjour,

    J'ai un petit souci avec l'affichage d'une combobox dans une boite de dialogue. La plupart du temps je n'arrive pas a ouvrir/deployer ma combobox (work around: cliquer en dehors => perte de focus et revenir sur la boite de dialogue).
    J'ai simplifie le code au maximum.

    Ca fonctionne tres bien quand je le lance en tant qu'application sous Eclipse par exemple, mais ca bug avec IE.

    Est ce que quelqu'un a une idee.

    Merci d'avance.

    Tof

    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
    package combo1;
     
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
     
    public class mainApplet extends JApplet {
     
    	private static final long serialVersionUID = -1;
     
    	Frame frame = (Frame)SwingUtilities.getAncestorOfClass(Frame.class, this);
     
    	public mainApplet() {
    		super();
    	}
     
    	public void init() {
    		this.setSize(700, 400);
     
    		JPanel homePanel = new JPanel(new BorderLayout());
     
    		JPanel titlePanel = new JPanel();
    		JLabel titleLabel = new JLabel("Welcome");
    		titlePanel.add(titleLabel);
     
    		JPanel messagePanel = new JPanel();
    		JLabel messageLabel = new JLabel("Open the option menu...");
    		messagePanel.add(messageLabel);
     
    		homePanel.add(titlePanel, BorderLayout.NORTH);
    		homePanel.add(messagePanel, BorderLayout.SOUTH);
     
    		setContentPane(homePanel);
     
            createMenu();
    	}
     
    	private void createMenu() {
    		JMenuBar mBar = new JMenuBar();
            setJMenuBar(mBar);
     
            JMenu jm = new JMenu("Options");
            mBar.add(jm);
     
            // Change the client
            ActionListener actionOption = new ActionOption();
            JMenuItem menuClient = new JMenuItem("Open dialog box...");
            menuClient.addActionListener(actionOption);
            jm.add(menuClient);
    	}
     
    	class ActionOption implements ActionListener {
    		public void actionPerformed( ActionEvent e ) {
    			OptionDlg dlg = new OptionDlg(frame, "Dialog box");
    	    }
    	}
     
    }
    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
    package combo1;
     
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
     
    public class OptionDlg extends JDialog {
     
    	private static final long serialVersionUID = -1;
     
    	public OptionDlg(Frame frame, String title) {
    		super(frame, title);
     
    		Container container = getContentPane();
    	    container.setLayout(new BorderLayout());
    	    setSize(500, 320);
    		setResizable(false);
     
    	    Dimension dim = getToolkit().getScreenSize();
    		setLocation(dim.width/3, dim.height/3);
     
    	    init(container);
     
    	    setModal(true);
    		setVisible(true);
    	}
     
    	private void init(Container container) {
    	    ActionOption action = new ActionOption();
     
    		DefaultComboBoxModel comboModelTest = new DefaultComboBoxModel();
    		String[] Tests = {"Test 1", "Test 2",
    			    "Test 3", "Test 4", "Test 5",
    			    "Test 6", "Test 7", "Test 8",
    			    "Test 9", "Test 10", "Test 11", 
    			    "Test 12", "Test 13", "Test 14", 
    			    "Test 15", "Test 16" };
     
    		for(int i = 0 ; i < 16 ; i++) {
    			comboModelTest.addElement(Tests[i]);
    		}
     
    		JComboBox comboTest = new JComboBox(comboModelTest);
    		comboTest.setSelectedIndex(0);
     
    		Dimension dim = new Dimension(80, 30);
    	    JButton okButton = new JButton("OK");
    	    okButton.setPreferredSize(dim);
    	    okButton.addActionListener(action);
     
    		JPanel panel1 = new JPanel();
    		panel1.add(comboTest);
    		JPanel panel2 = new JPanel();
    		panel2.add(okButton);
     
    	    container.add(panel1, BorderLayout.CENTER);
    	    container.add(panel2, BorderLayout.SOUTH);
    	}
     
    	class ActionOption implements ActionListener {
    		public void actionPerformed( ActionEvent e ) {
    			dispose();
    	    }
    	}
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <html>
    <body>
    <applet code=combo1.mainApplet.class width="100%" height="100%" >
    </applet>
    </body>
    </html>

  2. #2
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 15
    Par défaut
    il semblerait que ca soit un probleme de focus (quand je clique en dehors de la fenetre et que je reviens, l'utilisation de la combobox se fait normalement).
    Donc j'ai essaye de voir avec les methodes suivantes :

    setModal(true);
    setVisible(true);
    setFocusable(true);
    requestFocusInWindow();
    requestFocus();

    Mais le resultat n'est pas convainquant (Ca fonctionne plus souvent si la boite de dialogue n'est pas modale).

    Est ce que quelqu'un a une idee?

    Merci,

    Tof

  3. #3
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 15
    Par défaut
    Petite precision : j'utilise IE 7.0. Et pour mon code java j'ai le jdk 1.6.
    Est ce que quelqu'un a essaye?

  4. #4
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 15
    Par défaut
    J'ai reduit le code au maximum, j'ai fait le tour des forums.. Pas de solution.

    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
    import java.awt.Frame;
    import java.awt.event.*;
    import javax.swing.*;
     
    public class MainClass extends JApplet {
     
    	Frame frame = (Frame)SwingUtilities.getAncestorOfClass(Frame.class, this);
     
    	public MainClass() {
    		super();
    	}
     
    	public void init() {
    		JMenuBar mBar = new JMenuBar();
    		setJMenuBar(mBar);
    		JMenu jm = new JMenu("Option");
    		mBar.add(jm);
    		ActionListener actionOption = new ActionOption();
    		JMenuItem menuClient = new JMenuItem("Open dialog box...");
    		menuClient.addActionListener(actionOption);
    		jm.add(menuClient);
     
    		this.setVisible(true);
    	}
     
    	class ActionOption implements ActionListener {
    		public void actionPerformed( ActionEvent e ) {
    			JDialog dial = new JDialog(frame, "test", true);
    			String[] Tests = {"Test 1", "Test 2", "Test 3", "Test 4", "Test 5"};
    			dial.getContentPane().add(new JComboBox(Tests));
    			dial.setSize(100, 100);
     
    			dial.setVisible(true);
    		}
    	}
    }

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    Bon, j'ai plusieurs remarques relatives à ton code :
    1. Tu utilises du Swing (JApplet, JComboBox, ...) et du AWT (Frame). C'est pas super. Faut changer ça. Avec le point 3, ce sera résolu.
    2. Tu appelles un setVisible(true) sur une applet. Je ne crois pas que ce soit recommandé. Je ne sais même pas si c'est correct. C'est une méthode venant de JComponent et jamais réécrite dans l'arbre des classes de JApplet.
    3. Pour ton dialogue, il existe un constructeur JDialog(Window, ...) qui sera celui que tu utilises (puisque JApplet étend à 2 degrés Window et non Frame). Vire donc tous les appels zarbs nécessaires à Frame, et crée ton dialogue en faisant new JDialog(this, "titre", true).

    Si tu résouds déjà ceci, je crois qu'on y verra plus clair et on pourra t'aider plus en détail. D'ailleurs, il est possible que ça résolve ton souci

  6. #6
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 15
    Par défaut
    Merci pour cette reponse.
    Pour ne pas melanger AWT et SWING tu conseilles de faire comme ca :

    Pas possible avec this

    new JDialog(this, "titre", true);

    Donc plutot quelque chose comme ca?

    Window owner = (Window)this.getParent();
    new JDialog(owner, "titre", true);

    J'ai retire le setVisible(true) sur l'applet. mais ce ne change rien. Le probleme vient du fait que la boite de dialogue est modale.

    Je cherche donc l'exemple le plus simple possible pour ouvrir une boite de dialogue modale contenant une combobox dans une applet.
    Tout se passe bien lors de la premiere ouverture, c'est pendant les suivantes qu'il y a un probleme.

    Je continue a investiguer...

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/06/2014, 03h01
  2. Affichage d'un objet matrice dans une boite de dialogue
    Par FATENMRABET dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 14/12/2013, 21h31
  3. affichage de données dans une boite de dialogue
    Par Invité dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 20/07/2009, 10h20
  4. Affichage composants dans une boite de dialogue.
    Par argon dans le forum GTK+ avec C & C++
    Réponses: 4
    Dernier message: 13/02/2007, 21h52
  5. Réponses: 3
    Dernier message: 10/10/2006, 16h30

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