Comment créer un JButton extension avec des coins arrondis?
C'est une continuation de la question "Java arrondie Swing JButton". J'ai cherché une extension de javax.swing.JButton qui va hériter de tout comportement d'exécution et de substituer le dessin des coins.
En utilisant le code donné par noé.w sur soleil page forums le résultat ressemble à ceci:
J'aimerais être en mesure d'avoir le même dégradé en arrière-plan, sur la souris sur le changement etc. Quelqu'un sait comment faire cela?
Code qui crée le Java Swing fenêtre de l'image est:
public class XrButton extends JButton implements MouseListener {
private static final long serialVersionUID = 9032198251140247116L;
String text;
boolean mouseIn = false;
public XrButton(String s) {
super(s);
text = s;
setBorderPainted(false);
addMouseListener(this);
setContentAreaFilled(false);
}
@Override
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
if (getModel().isPressed()) {
g.setColor(g.getColor());
g2.fillRect(3, 3, getWidth() - 6, getHeight() - 6);
}
super.paintComponent(g);
if (mouseIn)
g2.setColor(Color.red);
else
g2.setColor(new Color(128, 0, 128));
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setStroke(new BasicStroke(1.2f));
g2.draw(new RoundRectangle2D.Double(1, 1, (getWidth() - 3),
(getHeight() - 3), 12, 8));
g2.setStroke(new BasicStroke(1.5f));
g2.drawLine(4, getHeight() - 3, getWidth() - 4, getHeight() - 3);
g2.dispose();
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.getContentPane().setLayout(new FlowLayout());
XrButton xrButton = new XrButton("XrButton");
JButton jButton = new JButton("JButton");
frame.getContentPane().add(xrButton);
frame.getContentPane().add(jButton);
frame.setSize(150, 150);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public void mouseClicked(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
mouseIn = true;
}
public void mouseExited(MouseEvent e) {
mouseIn = false;
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
La façon la plus simple pour obtenir le même dégradé/comportement est à chercher dans le jdk source pour que le regard et le sentir. Creuser dans ButtonUI et de ses sous-classes, et voir ce qu'ils font.
OriginalL'auteur Boris Pavlović | 2009-06-17
Vous devez vous connecter pour publier un commentaire.
Je pense que vous avez 2 choix s'offrent à vous:
1.Mettre en œuvre le dessin vous-même dans une méthode de peinture de votre composant
2.Créer de nouveaux ButtonUI pour votre look et la sensation. Dans ce cas, je suggère d'utiliser Synchroniser LAF
Dans les deux cas, le dessin des différents états de l'est de votre responsabilité exclusive,
l'information très utile...coup de pouce..
OriginalL'auteur Eugene Ryzhikov
La meilleure mise en œuvre, j'ai vu des boutons arrondis dans les Swing sont dans la Substance regarder et se sentir:
https://substance.dev.java.net/
Pas tous les thèmes ont arrondi les boutons de sorte que vous pouvez avoir besoin de changer les valeurs par défaut dans la démo. Le projet est open source donc il peut être vaut la peine de fouiller dans le code pour avoir des idées.
OriginalL'auteur Russ Hayward
J'avais besoin de faire ça aussi, c'est ce que j'ai (Métal LAF seulement!)
Qui ressemble à ceci:
http://i.stack.imgur.com/unZuc.png
OriginalL'auteur Whired
Vous avez des soins par vous-même:
GradientPaint
qui est utilisé pour dessiner des gradients..Par la façon dont l'esprit que vous devez prendre soin de diverses look-et-sent et que votre solution répondra à l'une de ces..
OriginalL'auteur Jack