Bonjour les amis, j'aimerai construire une interface graphique en java ou il y'a des bouttons déformés: c'est à dire les boutons ne sont plus des rectangles mais par exemple trapèzes. Merci de trouver un fichier joint qui explique.
Bonjour les amis, j'aimerai construire une interface graphique en java ou il y'a des bouttons déformés: c'est à dire les boutons ne sont plus des rectangles mais par exemple trapèzes. Merci de trouver un fichier joint qui explique.
Tu peux partir d'un nouveau JComponent/JPanel ou bien etendre AbstractButton ou JButton puis y inclure une Shape ou un Path2D ou encore un Polygon qui represente la zone clicquable du bouton et utiliser cette meme forme pour dessiner le bouton a l'ecran en fonction de son etat (fourni par le ButtonModel si tu herites d'AbstractButton ou JButton).
Grosso modo.
Il faudra egalement gerer les events de la souris pour verifier que tu es bien dans la zone (buttonShape.contains(event.getX(), event.getY()) pour des truc comme l'effet rollover lorsque le curseur est sur le bouton ou quand tu cliques dedans.
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 public class MyButton extends AbstractButton { private Shape buttonShape; public MyButton(String text, Icon icon) { [...] setOpaque(false); setPreferredSize(precalculateShapeAndPreferredSize()); } /** Mettre des propertyChangeListener sur les proprietes du bouton (text, icon, font, etc...) qui peuvent influencer la taille et recalculer si necessaire. */ private Size precalculateShapeAndPreferredSize() { // Caculer la taille de la forme du bouton en fonction de son texte, police, icon, marges et decos. ... } @Override protected void paintComponent(Graphics g) { Dimension size = getSize(); Insets insets = getInsets(); int width = size.width - (insets.left + insets.right); int height = size.height - (insets.top + insets.bottom); Graphics2D g2d = (Graphics2D)g.create(insets.left, insets.top, width, height); g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); try { g2d.setStroke(new BasicStroke(1f)); g2d.setPaint(Color.BLACK); g2d.draw(buttonShape); } catch (Exception e) { g2d.dispose(); } } }
Tu peux egalement utiliser un JXButton de SwingX et bosser avec des Painter histoire de te simplifier la tache au niveau du rendu graphique (mais ce n'est pas une solution miracle non-plus).
Merci de penser au tagquand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.
suivez mon blog sur Développez.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook
Partager