2016-05-22 10 views
0

Ich möchte einen Kreis in der Mitte von JButton malen. Hier ist, was ich versucht:Malen eines Kreises in der Mitte von JButton

JButton jButton = new JButton(new CircleIcon()); 

public class CircleIcon implements Icon{ 
    @Override 
    public void paintIcon(Component c, Graphics g, int x, int y) { 
     g.drawOval(10, 10, 20, 20); 
    } 

    @Override 
    public int getIconWidth() { 
     return 10; 
    } 

    @Override 
    public int getIconHeight() { 
     return 10; 
    } 
} 

ich diese bekam:

enter image description here

Aber ich brauche etwas wie folgt aus:

enter image description here

Meine Frage ist, was ist die quare in die Mitte des Knopfes auf dem ersten Bild? Und wie man es wie im zweiten macht?

+1

'g.drawOval (0, 0, 10, 10);'? ..oder 'g.fillOval (0, 0, 10, 10);' –

+0

@AndrewThompson Eigentlich ja. Mein schlechtes ... Aber irgendwie druckt es noch das Quadrat in der Mitte des Knopfes. Wie damit umgehen? – stella

+0

* "Aber trotzdem .." * Für bessere Hilfe, früher, ein [MCVE] oder [kurze, selbständige, korrekte Beispiel] (http://www.sscce.org/). Zuerst sollten Sie untersuchen ['AbstractButton.setFocusPainted (boolean)'] (http://docs.oracle.com/javase/8/docs/api/javax/swing/AbstractButton.html#setFocusPainted-boolean-) .. –

Antwort

3

The Swing Tutorial, wie man Symbole verwenden helfen sollte: Creating a Custom Icon Implementation

import java.awt.*; 
import javax.swing.*; 
public class CircleIconTest { 
    public JComponent makeUI() { 
    JPanel p = new JPanel(); 
    p.add(new JButton(new CircleIcon())); 
    return p; 
    } 
    public static void main(String... args) { 
    EventQueue.invokeLater(() -> { 
     JFrame f = new JFrame(); 
     f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     f.getContentPane().add(new CircleIconTest().makeUI()); 
     f.setSize(320, 240); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    }); 
    } 
} 
class CircleIcon implements Icon { 
    @Override 
    public void paintIcon(Component c, Graphics g, int x, int y) { 
    //g.drawOval(10, 10, 20, 20); 
    Graphics2D g2 = (Graphics2D) g.create(); 
    //Draw the icon at the specified x, y location: 
    g2.drawOval(x, y, getIconWidth() - 1, getIconHeight() - 1); 
    //or 
    //g2.translate(x, y); 
    //g2.drawOval(0, 0, getIconWidth() - 1, getIconHeight() - 1); 
    g2.dispose(); 
    } 

    @Override 
    public int getIconWidth() { 
    return 20; 
    } 

    @Override 
    public int getIconHeight() { 
    return 20; 
    } 
} 
+0

Cool, vielen Dank. Du rettest mein Leben!!! Aber ist es möglich, das Quadrat im Medle zu entfernen? Es scheint eine Grenze für die gemalte Ikone zu sein. Hacke, um es unsichtbar zu machen? – stella

3

was ist die quare in der mitte der taste auf dem ersten bild?

Sie haben wahrscheinlich ein Rechteck über Ihre Codes gemalt. Sie sollten nur nach drawRectangle( Codezeile auf Ihrem Codeblock suchen.

wie man es wie in der zweiten machen?

Es gibt 2 mögliche Lösungen dafür.

1 - Sie können eine bestimmte Größe für die Schaltfläche festlegen. Weil es scheint, als müsse man größer werden, um wie das letztere Bild gesehen zu werden. Versuchen Sie dies

2 - Sie verwenden statische Werte, um einen Kreis zu zeichnen. Ich würde dynamische Werte dafür verwenden. genau wie dieser.

   JButton JButton = new JButton() { 
       @Override 
       protected void paintComponent(Graphics g) { 
        super.paintComponent(g); 
        int nGap = 10; 
        int nXPosition = nGap; 
        int nYPosition = nGap; 
        int nWidth = getWidth() - nGap * 2; 
        int nHeight = getHeight() - nGap * 2; 

        g.setColor(Color.RED); 
        g.drawOval(nXPosition, nYPosition, nWidth, nHeight); 
        g.fillOval(nXPosition, nYPosition, nWidth, nHeight); 

       } 
      }; 

      JButton.setHorizontalAlignment(JLabel.CENTER); 
      JButton.setVerticalAlignment(JLabel.CENTER); 

Dies ist die Schaltfläche Display in verschiedenen Größen.

screenshot-1 screenshot-2

3
jButton.setFocusPainted(false); // This will prevent the square highlight on focus!