Comment faire de la toile avec de la Balançoire?
Je suis en train de faire de la peinture de l'éditeur Java dans lequel j'ai une barre d'outils avec les objets que je voudrais coller dans le canevas. Je suis à l'aide de composants Swing pour faire l'interface graphique, mais quand j'ai regardé pour la façon de faire de la toile, je n'ai trouvé que la classe de toile de AWT.
Est-il possible de faire quelque chose de semblable à la toile avec Swing? (par exemple, un Composite?) J'ai lu que l'utilisation de la classe de toile de AWT avec une interface graphique faite avec swing ne fonctionne pas correctement, est-ce vrai?
Vous devez vous connecter pour publier un commentaire.
Afin de faire une "Toile" en swing vous l'habitude d'écrire une sous-classe d'une
Composite
. Ensuite, vous devez remplacer leprotected paintComponent(Graphics g)
méthode deJPanel
.Dans la méthode de peinture, vous pouvez appeler des méthodes sur le
carte Graphique
objet de réellement tirer sur laJPanel
.Comme toujours, la Java Tutoriels ont un grande référence sur cette pour obtenir vous avez commencé.
Vous aurez probablement envie de faire une sous-classe de
Composite
et de mettre en œuvre votre propre façon de peindre les composants que vous voulez dessiner sur le panneau.L'approche de base sera probablement le long de la ligne de l'attribution d'une
MouseListener
à la sous-classe deJPanel
, puis appliquer la peinture de la fonctionnalité.L'idée de base peut être quelque chose le long de la ligne de:
L'exemple ci-dessus est incomplète (et non testé-il certainement ne compile pas), mais ça donne une idée sur la façon de mettre en œuvre un
MyCanvas
classe dans laquelle un utilisateur peut cliquer sur et à dessiner des cercles.La
img
objet est utilisé pour contenir l'image de la toile. LepaintComponent
méthode est utilisée pour peindre lesimg
objet de la toile. Dans lemouseClicked
méthode, laGraphics
objet associé àimg
est récupérée afin defillOval
sur l'image.Depuis l'une des exigences est de coller des images sur la toile, il peut être une bonne idée de tenir certaines
Image
s que vous souhaitez coller la toile. Peut-être quelque chose le long de la ligne de:Puis, dans la routine de peindre l'image sur
img
stockées dansMyCanvas
:À l'aide de la
drawImage
méthode de lacarte Graphique
objet, d'autresImage
s peuvent être dessinés sur desImage
s.Comme pour la question sur AWT et Swing, oui, c'est vrai que vous ne souhaitez pas mélanger les composants de l'AWT et Swing, comme ils diffèrent dans la manière de rendre composants GUI. AWT est basée sur des poids lourds de composants, ce qui signifie qu'ils natif de fenêtrage pour la peinture de l'interface graphique, alors que le Swing est basée sur des composants légers, ce qui signifie le GUI est attirée par Java lui-même sans l'aide de composants natifs.
Un bon guide sur la différence de AWT et Swing est fourni dans La peinture dans AWT et Swing article de Soleil.
Simplement sous-classe
JComponent
.JPanel
est inadapté à la classe. Il est souvent suggéré qu'il semble avoirsetOpaque(true)
appelée automatiquement. C'est en fait le PL&F qui fait ça, et si oui ou non ce qui se passe en réalité est mise en œuvre et le vendeur dépendante.Canvas
est un poids lourd de la composante. C'est-à-dire qu'elle est contrôlée par le système de fenêtrage. Le résultat est qu'il va généralement être attirée sur le dessus des composants Swing, sans égard à l'ordre-z ou de la saturation (en le mettant dans un panneau défilant donnera comportement étrange).Vous voudrez peut-être regarder à l'Minueto API. Il est très simple à utiliser api graphique, et vous pouvez combiner les Java événement écoute avec lui pour fournir votre dessin capacité.
http://minueto.cs.mcgill.ca/