Création de Boutons Carrés en Swing
Je voudrais créer quelque chose comme ce qui suit dans Swing:
La partie supérieure est relativement facile: je peux juste créer un tableau et l'afficher. Ce que je vais avoir des ennuis avec, le carré boutons plus et moins en bas, qui sont conçus pour ajouter un nouvel élément ou de supprimer l'élément sélectionné respectivement. En particulier, je n'ai pas été en mesure de faire de la place de la forme, car sur Mac OS X et d'autres plates-formes, JButtons sont des rectangles avec des coins arrondis et je ne peux pas trouver un moyen de changer cela. Aussi, je vais vouloir vous assurer que c'est un carré parfait et sans aucun espace entre les boutons.
Comment cela peut-il être accompli en une croix-plate-forme de façon à Balancer?
OriginalL'auteur Thunderforge | 2013-04-27
Vous devez vous connecter pour publier un commentaire.
Vous pouvez définir la taille d'un bouton à l'aide de l'aide de setPreferredSize():
Vous pourriez être en mesure de supprimer les coins arrondis à l'aide:
Si cela ne fonctionne pas, vous pouvez remplacer la paintComponent() méthode sur JButton.
createEmptyBorder()
supprime complètement toute la frontière, en faisant le bouton impossible à distinguer d'un JLabel, au moins sur Mac OS X.Il s'avère donc que sur Mac OS X, si vous ne
button.setPreferredSize(new Dimension(20, 20));
et ne pas faire n'importe quoi avec de la frontière, le bouton est suffisamment grande pour afficher le signe+, il descend les coins arrondis, c'est carré, et il a le dégradé. Donc, cela se révèle être la bonne solution, à ma grande surprise. Il ressemble à Mac OS X par défaut d'un bouton rond, sauf si vous modifiez aucun aspect de celui-ci, à quel point il descend à des changements de boutons.Intéressant, édité ma réponse à refléter vos commentaires. Après une période d'expérimentation sur Windows XP; JButtons ont des coins carrés par défaut, le paramètre pas de frontière n'a aucun effet et le gradient n'est perdu si vous utilisez
setBackgroundColour()
.Remarque cette technique sera automatiquement compte pour le PLAF et le texte du bouton/icône, alors que la technique illustrée sur ce réponse est fragile et ne sera vraisemblablement pas si le texte ou le PLAF sont définies une fois que le bouton de création.
OriginalL'auteur user0
Changement de la Frontière:
Modifier.
Une autre approche est de créer votre propre icône à partir d'un bouton existant. Quelque chose comme ce qui suit:
Le code ci-dessus devrait créer une image de votre bouton sur n'importe quelle plateforme. J'ai augmenté la taille préférée pour éviter de prendre une image de la frontière.
Vous aurez besoin d'utiliser la L'Image De L'Écran classe.
Publier vos SSCCE montrant le problème. Une Frontière n'a rien à voir avec le gradient de l'ensemble de bouton (que je connais).
La création d'un nouveau bouton avec
JButton button = new JButton("+");
puis en ajoutant cette ligne fait un carré à la frontière, mais il supprime le "gradient" qui la fait ressembler à un bouton.Ce n'est pas un SSCCE. Le Gradient est peint pour moi. J'utilise JDK7 sur Windows 7. Si le code ne fonctionne pas pour vous, puis poster un SSCCE. Peut-être que c'est une plate-forme de question. Peut-être que vous faites quelque chose de mal.
Ensuite, vous avez une plate-forme de question. C'est pourquoi vous postez un SSCCE avec chaque question. Vous voulez de l'aide, donc faire un effort pour poster votre code afin que nous puissions voir ce que vous faites. Je ne sais pas comment Mac fonctionne donc je ne peux pas ne plus offrir de l'aide. C'est une peinture custom problème ne peut être résolu d'une manière générique. Si vous n'aimez pas la façon dont le bouton est le bouton, alors vous aurez besoin de faire de la peinture custom.
OriginalL'auteur camickr
Ceci est très facilement atteint, en retournant une préférence de taille NxN - où N est le plus grand préféré la largeur ou la hauteur.
Quand vous dites qu'il prendra en compte les PLAF et texte/icône, vous dites qu'il redimensionne automatiquement en fonction de ce qui est réellement sur le bouton, même si elle a changé? Aussi, est-il un moyen de le rendre moins d'espace autour du texte, comme dans l'exemple de la question?
"Quand vous dites qu'il prendra en compte les PLAF et texte/icône, vous dites qu'il redimensionne automatiquement en fonction de ce qui est réellement sur le bouton, même si elle a changé?" je suis étonné de voir que les gens allaient me poser une question, ils peuvent résoudre par eux-mêmes en 10 minutes environ. . "moins d'espace autour du texte" Look pour les encarts et les PLAF.
J'ai eu accès, hier, quand j'ai posé la question et a accepté une réponse, je n'ai pas lorsque vous avez posté votre réponse aujourd'hui. J'ai été tout simplement demander des précisions sur ce que vous disiez. Désolé de vous ont offensé.
OriginalL'auteur Andrew Thompson
C'est bon tutoriel pour personnaliser la conception de boutons.
Prendre un coup d'oeil: Boutons Personnalisés
OriginalL'auteur Ash..
Bien afin de les rendre place, vous avez 2 options: 1. Faire le bouton maintenez une icône de l'image de la juste place de l'image d'une image transparente. 2. vous pouvez définir le bouton dimensions sur votre propre. Je ne suis pas sûr de la façon de définir les dimensions, mais c'est une option que vous pourriez choisir. Il vous suffit de créer un JToolBar qui est défini sur le BorderLayout.Extrémité SUD de la fenêtre chaque fois que vous ajoutez, et quel que soit les boutons sont ajoutés sur qui sera juste à côté les uns des autres. Pour ajouter les boutons de faire ceci:
Cela va ajouter de la barre d'outils sur la JFrame, Composite, ou ce que vous êtes en train d'ajouter sur, et il sera mis vers le bas de l'écran comme vous le voyez ci-dessus.
Espérons que cette aide!
OriginalL'auteur user2277872