我写了一个类,继承了JPanel类。
在上面画了一些图片,并放置了几个按钮。
现在我想把默认的按钮换成不规则形状,代码如下:
private JButton pp2 = new JButton("2");
private Shape shape = null;
构造函数中增加代码:
pp2.setBounds(50,600,60,60);
//lp是面板
lp.add(pp2);
//pp2为按钮
pp2.setContentAreaFilled(false);
增加方法:
 public void paintBorder(Graphics g) {
        //g.setColor(getForeground());
        g.drawRoundRect(50, 600, 60, 60,60, 60);
    }
public boolean contains(int x, int y) {
        // 判断点(x,y)是否在按钮内
        if (shape == null || !(shape.getBounds().equals(getBounds()))) {
            shape = new RoundRectangle2D.Float(50, 600, 60, 60,
                                               60, 60);
        }
        return shape.contains(x, y);
    }这样我的确是画出了一个圆角按钮,但如何去掉外边四方的边框?
还有就是contains()方法使除了pp2外所有按钮都失效了?为什么会这样?
我如果想设置多个不规则按钮该如何写?
恳请高手能留个QQ,万分感谢!!!!

解决方案 »

  1.   

    扩展JButton类.class MyBt extends JButton
    {
    public MyBt(String name)
    {
    super(name);
    this.setContentAreaFilled(false);

    }
    @Override

    public void paintBorder(Graphics g)

            g.setColor(java.awt.Color.BLACK);
            g.fillRoundRect(0, 0, 90, 40,20, 20);
    }
    @Override
    protected void paintComponent(Graphics g)
    {
    g.setColor(java.awt.Color.BLACK);
    g.fillRoundRect(0, 0, 90, 40,20, 20);
    super.paintComponent(g);


            private Shape shape=null;

    }在JFrame里:MyBt jb1=new MyBt("1");
    jb1.setBounds(250, 250, 100, 40);
    jb1.addActionListener
    (
    new java.awt.event.ActionListener()
    {
                    public void actionPerformed(ActionEvent e)
            {
            // TODO Auto-generated method stub
    javax.swing.JOptionPane.showMessageDialog(null, "button clicked "+((MyBt)e.getSource()).getText());

    }

    }
    );