java中如何实现圆角按钮 ? 
如QQ登录时的查杀木马,和设置按钮,和圆角是怎么样实现的?用哪个属性??谢谢!!

解决方案 »

  1.   

    推荐楼主看Swing Hacks这本书, 里面这种自定义组件非常的多, 写得很好.
      

  2.   

    到网上找了个不知道lz是不是这个意思
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Shape;
    import java.awt.geom.RoundRectangle2D;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    public class MyButton extends JButton  {
     private Shape shape = null;
     private Color quit = new Color(0, 0, 228);// 离开时颜色
     public MyButton(String s) {
      super(s);
      //addMouseListener(this);
      setContentAreaFilled(false);// 是否显示外围矩形区域 选否
     }
     public void paintComponent(Graphics g) {
       g.setColor(quit);
      //填充圆角矩形区域 也可以为其它的图形
      g.fillRoundRect(0, 0, getSize().width - 1, getSize().height - 1,
          20, 20);
      //必须放在最后 否则画不出来
      super.paintComponent(g);
     }
     public void paintBorder(Graphics g) {
      //画边界区域
      g.drawRoundRect(0, 0, getSize().width - 1, getSize().height - 1,
          20, 20);
     }
     public static void main(String[] argv) {
      JFrame f = new JFrame();
      f.setSize(400, 300);
      MyButton btn = new MyButton("button");
      f.setLayout(null);
      btn.setBounds(100, 100, 80, 30);
      f.getContentPane().add(btn, BorderLayout.NORTH);
      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      f.setVisible(true);
     }
    }
      

  3.   

    想重点指出的是:
             setContentAreaFilled(false);// 是否显示外围矩形区域 选否 
    这一句代码非常重要, 如果不设置或者设置为true(默认就是true), 那么, 系统会调用JButton来绘制按钮的外观, 即你在paintComponent(..)这个方法中的绘制不会起作用.
      

  4.   

    改环境L&F调整成圆的不就行了
      

  5.   

    楼上的调整 l&f 可以达到目标?怎么样具体操作?
      

  6.   

    修改L&F和重写JButton都是一样的写法. 不过上面的代码中还需要重写contains方法, 不然虽然按钮看上去是圆的, 鼠标点击的时候仍然可以点击到圆以外的地方, 因为组件默认是矩形的.
      

  7.   

    找一现成的 L&F 即感官。
      

  8.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【haoyanbinok】截止到2008-07-29 10:19:30的历史汇总数据(不包括此帖):
    发帖的总数量:24                       发帖的总分数:460                      每贴平均分数:19                       
    回帖的总数量:6                        得分贴总数量:1                        回帖的得分率:16%                      
    结贴的总数量:13                       结贴的总分数:160                      
    无满意结贴数:3                        无满意结贴分:60                       
    未结的帖子数:11                       未结的总分数:300                      
    结贴的百分比:54.17 %               结分的百分比:34.78 %                  
    无满意结贴率:23.08 %               无满意结分率:37.50 %                  
    楼主加油
      

  9.   

    我建议采用L&F设置,网上很多开源扩展包,例如substance.jar包。可以再www.open-open.com上面查找
    不过,如果需要自己定义按钮的外观,除了楼上的高手解决的方法外,如果想避免鼠标点击按钮的时候出现
    圆形以外的矩形方框,可以采用下面的方法来取消:
    jb1.setUI(new BasicButtonUI());
    jb1.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
    //PS:jb1为JButton对象以上仅为参考,希望大家互相探讨!
      

  10.   

    网上
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Shape;
    import java.awt.geom.RoundRectangle2D;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    public class MyButton extends JButton  {
    private Shape shape = null;
    private Color quit = new Color(0, 0, 228);// 离开时颜色
    public MyButton(String s) {
      super(s);
      //addMouseListener(this);
      setContentAreaFilled(false);// 是否显示外围矩形区域 选否
    }
    public void paintComponent(Graphics g) {
      g.setColor(quit);
      //填充圆角矩形区域 也可以为其它的图形
      g.fillRoundRect(0, 0, getSize().width - 1, getSize().height - 1,
          20, 20);
      //必须放在最后 否则画不出来
      super.paintComponent(g);
    }
    public void paintBorder(Graphics g) {
      //画边界区域
      g.drawRoundRect(0, 0, getSize().width - 1, getSize().height - 1,
          20, 20);
    }
    public static void main(String[] argv) {
      JFrame f = new JFrame();
      f.setSize(400, 300);
      MyButton btn = new MyButton("button");
      f.setLayout(null);
      btn.setBounds(100, 100, 80, 30);
      f.getContentPane().add(btn, BorderLayout.NORTH);
      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      f.setVisible(true);
    }
      

  11.   

    JLabel、JLabel、JLabel、JLabel、JLabel…………加上图片,用鼠标事件响应…………为什么没人用呢?很简单又很实用的解决方法……
      

  12.   

    L&F不会用啊,布局的layout也不会在java API上看见的很多,如:getUI() :  返回呈现此组件的 L&F 对象啥意思?不会~~~
              
      

  13.   

    在网上找一个substance.jar这个java的三方包.如果不会用就发消息给我.只要加上这个包.按钮就变圆了
      

  14.   

    呵呵 能让Frame透明吗 在frame上的组建却不透明
      

  15.   

    FRAME可以透明,在它上面的组件同样可以透明~~