2016-05-22 11 views
0

JButtonの中央に円を描きたいと思います。私はこれだ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; 
    } 
} 

:ここに私が試したものです

enter image description here

をしかし、私はこのようなものが必要:

enter image description here

私の質問quareではあるものです最初の写真のボタンの真ん中?そしてそれを第2のものと同じようにする方法は?

+1

'g.drawOval(0、0、10、10);'を? ..または 'g.fillOval(0、0、10、10); ' –

+0

@AndrewThompson実際、はいです。私の悪い...しかし、とにかくそれはまだボタンの中央に正方形を印刷します。それをどうやってやるの? – stella

+0

* "しかし、とにかく.." *より良い助けを早く得るには、[MCVE]または[ショート、自己包含、正しい例](http://www.sscce.org/)を投稿してください。最初に['AbstractButton.setFocusPainted(boolean)'](http://docs.oracle.com/javase/8/docs/api/javax/swing/AbstractButton.html#setFocusPainted-boolean-)を調べることをお勧めします。 –

答えて

3

役立つはずのアイコンを使用する方法についてのSwingチュートリアル: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

クール、ありがとう。あなたは私の人生を救う!しかし、メイドルの正方形を取り除くことは可能ですか?それは、ペイントされたアイコンの境界線のようです。それを見えないようにする鍬? – stella

3

最初の写真のボタン中央には何がありますか?

コードの上に長方形が描かれている可能性があります。コードブロックにdrawRectangle(のコード行を探してください。

2番目と同じようにするには?

解決策は2つあります。

1 - ボタンのサイズをいくつか設定できます。なぜなら、後者の画像のように見えるほど大きくなる必要があるからです。試してみてください

jButton.setPreferredSize(new Dimension(40, 40)); 

2 - 静的な値を使って円を描いています。私はそれに動的な値を使用します。ちょうどこのような。

   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); 

これは、さまざまなサイズのボタン表示です。

screenshot-1 screenshot-2

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