Maison >Java >javaDidacticiel >Comment puis-je utiliser efficacement la vitre de Swing pour superposer des composants ?

Comment puis-je utiliser efficacement la vitre de Swing pour superposer des composants ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-10 18:14:14161parcourir

How Can I Effectively Use Swing's Glass Pane to Overlay Components?

Placement d'un composant sur la vitre : un guide complet

Comprendre les vitres

Swing fournit une vitre pour chaque conteneur, située entre la vitre racine et ses enfants. Par défaut, la vitre est transparente, mais des composants peuvent y être ajoutés et dessinés. Ces composants apparaissent devant tous les autres composants du conteneur et restent visibles même lorsque le conteneur n'est pas la fenêtre active.

Ajout d'un composant à la vitre

Pour ajouter un composant à la vitre, suivez ces étapes :

  1. Ajoutez la vitre à la racine pane : rootPane.setGlassPane(new JPanel())
  2. Rendre la vitre visible : glassPane.setVisible(true)
  3. Ajouter le composant à la vitre : glassPane.add(component)
  4. Valider les limites : Assurez-vous que les limites du composant sont valides.

Dépannage des problèmes de visibilité

Malgré ces étapes, il se peut que vous ne voyiez toujours pas le composant. Les raisons potentielles incluent :

  • Verre opaque : Définissez la vitre sur opaque à l'aide de glassPane.setOpaque(true)
  • Composant invisible : Confirmez que le composant est visible en appelant composant.setVisible(true)
  • Gestionnaire de mise en page : Utilisez une mise en page de flux au lieu d'une mise en page de bordure, car cette dernière peut remplacer la taille préférée du composant.
  • Taille préférée : Définissez une taille préférée non nulle pour le composant.

Exemple concret : faire glisser une pièce d'échecs

Considérez l'exemple fourni dans la réponse donnée :

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class ChessBoard extends JFrame implements MouseListener, MouseMotionListener {
    // ... (code omitted)

    /*
    **  Add the selected chess piece to the dragging layer so it can be moved
    */
    public void mousePressed(MouseEvent e) {
        // ... (code omitted)

        layeredPane.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
    }

    /*
    **  Move the chess piece around
    */
    public void mouseDragged(MouseEvent me) {
        // ... (code omitted)

        chessPiece.setLocation(x, y);
    }

    // ... (code omitted)
}

Dans ce code :

  • L'échiquier est placé sur les couches volet.
  • Lorsque l'utilisateur appuie sur la souris sur une pièce d'échecs, la pièce est ajoutée au calque de déplacement du volet en couches.
  • Pendant le déplacement de la souris, l'emplacement de la pièce est mis à jour.
  • Lorsque la souris est relâchée, la pièce est retirée du calque de glissement et ajoutée à la case appropriée sur le jeu d'échecs. tableau.

En comprenant les principes d'utilisation des vitres et en les appliquant à des scénarios spécifiques, vous pouvez créer des composants personnalisés dotés de fonctionnalités avancées.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn