如何在java中创建圆形JButton ..?

时间:2011-02-25 16:53:47

标签: java swing jbutton rounded-corners look-and-feel

我想在Java中创建圆形JButton ...
为此,我使用圆形图像并将该图像放在按钮上,但我没有得到圆形按钮..

请任何人都可以告诉如何在Java中创建圆形按钮如下图所示.. enter image description here

提前感谢.....

4 个答案:

答案 0 :(得分:6)

如果您打算使用圆形按钮的图像,为什么不使用JLabel?也就是说,只需调用setIcon(...),将BufferedImage实例作为参数传递。

CODE

public final class RoundedButtonDemo {
    private static BufferedImage bi;

    public static void main(String[] args){
        try {
            loadImage();

            SwingUtilities.invokeLater(new Runnable(){
                @Override
                public void run() {
                    createAndShowGUI();             
                }
            });
        } catch (IOException e) {
            // handle exception
        }
    }

    private static void loadImage() throws IOException{
        bi = ImageIO.read(RoundedButtonDemo.class.getResource("../resources/login.png"));
    }

    private static void createAndShowGUI(){
        final JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        final JLabel label = new JLabel();
        label.setIcon(new ImageIcon(bi));

        frame.getContentPane().add(label);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}

输出

enter image description here

请注意,您需要以编程方式使图片的背景透明,或者您需要使用Paint.NET等图片编辑工具。

答案 1 :(得分:4)

使用将透明颜色设置为其形状JButton

的图像的任何形状

Create Round JButton in Swing

public RoundButton (String text, Icon icon) {
    setModel (new DefaultButtonModel ());
    init (text, icon);
    if (icon == null) {
      return;
    }
    setBorder (BorderFactory.createEmptyBorder (1, 1, 1, 1));
    setBackground (Color.BLACK);
    setContentAreaFilled (false);
    setFocusPainted (false);
    //setVerticalAlignment(SwingConstants.TOP);
    setAlignmentY (Component.TOP_ALIGNMENT);
    initShape ();
  }

在上面的示例中,JButton通过粘贴圆形图像来创建一个按钮。

圆形,相同大小的PNG是一个图像(圆圈外面是透明色),提供三种类型的JButton设置为

  1. 的setIcon
  2. setPressedIcon
  3. setRolloverIcon
  4. setContentAreaFilled(false)设置之类,它不会绘制 按钮本身
  5. 它包含覆盖,如果您点击圆形按钮的外侧以便不作出反应

    1. 在此示例中,并不一定是生成圆圈 从图像的透射颜色,并准备单独 圆形塑造图像的大小
    2. 从透明色的图像中,设置可点击区域, 更改JComponent的形状定义。
    3. 您可以在 GeekOnJava

      上查看Runnable Jar文件和完整的源代码

答案 2 :(得分:2)

你需要写一个“外观”(Java Swing的主题)。不是为了胆小的人,而是可能的。我建议看看现有主题。

LIQUIDLNF应该是一个好的开始。

答案 3 :(得分:1)

您可以使用JavaFX定义“Rich Graphic Components”示例(带渐变的圆角按钮):http://poligloci.blogspot.com/2009/07/beauty-and-beast-javafx-12-in-netbeans.html