1. #1
    Membre du Club
    Homme Profil pro
    Chercheur d'Emploi
    Inscrit en
    février 2017
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'Emploi

    Informations forums :
    Inscription : février 2017
    Messages : 72
    Points : 59
    Points
    59

    Par défaut Faire un JPanel non cliquable ?

    Salut, voici mon code:

    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
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Toolkit;
     
    import javax.swing.JFrame;
     
    public class MainTEMP {
     
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
     
    		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    		int width = (int) screenSize.getWidth();
     
    		JFrame fenetre = new JFrame();
    		Panel pan = new Panel();
    		fenetre.setContentPane(pan);
    		fenetre.setSize(100,100);
    		fenetre.setUndecorated(true);
    		fenetre.setAlwaysOnTop(true);
    		fenetre.setLocation(width-100, 0);
    		fenetre.setBackground(new Color(0,0,0,0));
    		fenetre.setVisible(true);
     
     
    	}
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import java.awt.Color;
    import java.awt.Graphics;
    import javax.swing.JPanel;
     
    public class Panel extends JPanel {
     
    	public void paintComponent(Graphics g) {
    		g.setColor(new Color(0, 0, 255, 25));
    		g.fillOval(0, 0, 100, 100);
    	}
    }
    Ce qui nous créer un rond bleu en haut a droite de l'écran a moitié translucide.

    Problème: lorsque le curseur est dans le rond bleu je ne peux pas cliquer cliquer sur ce qu'il y a derrière (en l'occurence, la croix rouge d'une fenêtre ouverte en plein écran, comme celle d'Eclipse, de Chrome ou autre.) Alors qu'en sortant du rond bleu je peux cliquer sur ce qu'il y a derrière la JFrame qui je ne sais pas pourquoi est devenue "incliquable".

    J'aimerais que le rond bleu soit "incliquable egalement" et donc pouvoir cliquer sur ce qu'il y a derrière la fenêtre et ce peu importe que mon curseur soit dans le rond ou en dehors.

    Vous avez une idée ?

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    septembre 2009
    Messages
    11 359
    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
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2009
    Messages : 11 359
    Points : 26 905
    Points
    26 905
    Billets dans le blog
    2

    Par défaut

    Salut,

    Le problème ne vient pas du panel mais de la fenêtre système utilisée pour gérer la JFrame. Il faudrait utiliser une fonction système pour l'empêcher de capter les évenements, avec JNA par exemple.

    Pour le click, une astuce pourrait être d'utiliser un Robot :

    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
    public class FrameThroughMouseAdapter extends MouseAdapter {
     
    	private Robot robot;
    	private Panel panel; 
     
    	public FrameThroughMouseAdapter(Panel panel) throws AWTException {
    		this.panel = panel;
    		robot = new Robot();
    	}
     
    	@Override
    	public void mouseClicked(MouseEvent e) {
    		Window frame = SwingUtilities.getWindowAncestor(panel);
    		Point p = e.getPoint();
    		SwingUtilities.convertPointToScreen(p, panel);
    		frame.setVisible(false);
    		robot.mouseMove(p.x, p.y);
    		for(int i=0; i<e.getClickCount();i++) {
    		robot.mousePress(InputEvent.getMaskForButton(e.getButton()));
    		robot.mouseRelease(InputEvent.getMaskForButton(e.getButton()));
    		}
    		frame.setVisible(true);
    	}
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public Panel() {
    		try {
    			FrameThroughMouseAdapter mouseAdapter = new FrameThroughMouseAdapter(this);
    			addMouseListener(mouseAdapter);
    			addMouseMotionListener(mouseAdapter);
    		} catch (AWTException e) {
    			e.printStackTrace();
    		}
    	}
    Avec un petit flash malheureusement.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    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. Faire une entrée non bufferisée
    Par Lockless dans le forum Linux
    Réponses: 2
    Dernier message: 24/07/2006, 14h08
  2. [HTML] bouton non cliquable
    Par alison239 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 12/06/2006, 15h01
  3. Comment faire un panel non rectangulaire?
    Par grincheux dans le forum C++Builder
    Réponses: 4
    Dernier message: 11/05/2003, 15h47

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