2009-04-22 12 views
9

(150,210)の(x、y)座標でJButtonラウンドを作成しようとしています。私はボタンが大きさ(40,40)の楕円形になるようにしたい。ボタンの背景色は赤です。それはテキストを必要としないので、私が望むどんな大きさでもボタンを手に入れる必要があります。ボタンを丸く作成する

私はパネルを使用しています、と私はnullにsetLayoutの設定:

setLayout(null) 

は、私がグーグルをチェックし、それが私をここにもたらしました。これどうやってするの?

答えて

12

JDCテクニカルティップ:1999年8月26日:Creating Round Swing Buttons

import java.awt.*; 
import java.awt.geom.*; 
import javax.swing.*; 

public class RoundButton extends JButton { 
    public RoundButton(String label) { 
    super(label); 

// These statements enlarge the button so that it 
// becomes a circle rather than an oval. 
    Dimension size = getPreferredSize(); 
    size.width = size.height = Math.max(size.width, 
     size.height); 
    setPreferredSize(size); 

// This call causes the JButton not to paint 
    // the background. 
// This allows us to paint a round background. 
    setContentAreaFilled(false); 
    } 

// Paint the round background and label. 
    protected void paintComponent(Graphics g) { 
    if (getModel().isArmed()) { 
// You might want to make the highlight color 
    // a property of the RoundButton class. 
     g.setColor(Color.lightGray); 
    } else { 
     g.setColor(getBackground()); 
    } 
    g.fillOval(0, 0, getSize().width-1, 
     getSize().height-1); 

// This call will paint the label and the 
    // focus rectangle. 
    super.paintComponent(g); 
    } 

// Paint the border of the button using a simple stroke. 
    protected void paintBorder(Graphics g) { 
    g.setColor(getForeground()); 
    g.drawOval(0, 0, getSize().width-1, 
     getSize().height-1); 
    } 

// Hit detection. 
    Shape shape; 
    public boolean contains(int x, int y) { 
// If the button has changed size, 
    // make a new shape object. 
    if (shape == null || 
     !shape.getBounds().equals(getBounds())) { 
     shape = new Ellipse2D.Float(0, 0, 
     getWidth(), getHeight()); 
    } 
    return shape.contains(x, y); 
    } 

// Test routine. 
    public static void main(String[] args) { 
// Create a button with the label "Jackpot". 
    JButton button = new RoundButton("Jackpot"); 
    button.setBackground(Color.green); 

// Create a frame in which to show the button. 
    JFrame frame = new JFrame(); 
    frame.getContentPane().setBackground(Color.yellow); 
    frame.getContentPane().add(button); 
    frame.getContentPane().setLayout(new FlowLayout()); 
    frame.setSize(150, 150); 
    frame.setVisible(true); 
    } 
} 
+2

これはOS X 10.7.5では動作しません。それは大きな正方形のボタンの中に円で囲まれています。これははるかに優れています:http://java-swing-tips.blogspot.com/2008/07/create-round-image-jbutton.html – d512

0

丸いボタンを作成する場合は、この方法を次の、私はそれが過度に複雑だと思います。 おそらく別の方法でOvalButtonを作成することができます。

+2

実際のクリック可能な楕円の境界が気にならない場合は、含まれている矩形)、次にpngイメージとsetContentAreaFilled(false)を使用します。作品 –

関連する問題