Bonjour,

Je rencontre un problème sur lequel je me suis récemment pris la tête.

J'ai fini par faire une petite classe de test qui au final n'utilise rien de métier et seulement quelques composants Swing mettant en évidence le souci.

Ma volonté consiste "juste" à mettre une liste déroulante dans un dialogue.

Si la liste déroulante s'ouvre en dehors de la taille du dialogue (comprendre qu'une fois ouverte elle dépasse), dans ce cas cela fonctionne. Dans le cas contraire, si le JDialog est assez grand pour couvrir la surface de la liste déroulante ouverte, rien n'apparait.

On peut noter que dans ce dernier cas, cela semble malgré tout marcher correctement quand on déplace le JDialog proche de la bordure de l'écran où il y a la barre des taches. Assez ... étrange.

Du coup j'ai deux questions :
1. Est-ce un problème connu et y a-t-il une solution ?
2. Est-ce que c'est moi qui fait n'imp' aujourd'hui et je devrais peut être m'y prendre autrement ?

Merci.

Voici le code pour tester :

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
 
package com.ankamagames.awer.ui.dialog;
 
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
public class JDialogTest extends JDialog {
 
 
	public JDialogTest(Frame parent) {
		super(parent, true);
		setResizable(false);
		setBounds(100, 100, 300, 100);  // This is OK.
//		setBounds(100, 100, 100, 400);  // This is OK too.
//		setBounds(100, 100, 300, 400);  // Not ok : combo box doesn't show proposals
 
		JRootPane pane = getRootPane();
		pane.setLayout(null);
 
		JComboBox box = new JComboBox();
		box.addItem("Blah 1");
		box.addItem("Blah 2");
		box.addItem("Blah 3");
		box.addItem("Blah 4");
		box.setBounds(20,20,200,30);
		pane.add(box);
 
		setVisible(true);
	}
 
 
	public static void main(String[] args) {
		final JFrame frame = new JFrame();
		frame.setBounds(100,100,600,500);
 
		JButton button = new JButton("Click");
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				JDialogTest test = new JDialogTest(frame);
				test.setVisible(true);
			}
		});
		frame.getContentPane().add(button);
		frame.setVisible(true);
	}
}