Wednesday, May 21, 2014

how to change the border of a button in java?





There is a way to change the default button border of swing's JButton to some others by implementing Border and overriding its method. Below is the code to do so.



ChangeButtonShape.java


import java.awt.*;

import javax.swing.*;

import java.awt.geom.*;

import java.awt.event.*;

import javax.swing.border.*;



public class ChangeButtonShape {

public static void main(String[] args) {



try {

            String laf = UIManager.getSystemLookAndFeelClassName();

            UIManager.setLookAndFeel(laf);        //throws UnsupportedLookAndFeelException

                                                                      

    }

                                  

            catch (Exception e) {

             e.printStackTrace();

            }

//if the look and feel code is written below the JFrame object then JFrame will

//not be shown as windows look & feel. Only components will shown as windows look.



JFrame frame = new JFrame();

frame.getContentPane().setLayout(null);

JLabel l=new JLabel("Name");

final JTextField text=new JTextField(20);

JButton button = new JButton("Go");

//button.setBackground(Color.lightGray);

l.setBounds(10,10,100,20);

text.setBounds(100,10,180,20);

button.setBounds(10,40,50,20);

button.setBorder(new RoundedBorder(10));

frame.add(l);

frame.add(text);

frame.add(button);



button.addActionListener(new ActionListener(){

    public void actionPerformed(ActionEvent e){

String st=text.getText();

JOptionPane.showMessageDialog(null,"Hello "+st);



    }

});

frame.setSize(300,150);

frame.setVisible(true);



}

}

class RoundedBorder implements Border {

        int radius;

        RoundedBorder(int radius) {

            this.radius = radius;

        }

        public Insets getBorderInsets(Component c) {

            return new Insets(this.radius+1, this.radius+1, this.radius+2, this.radius);

        }

        public boolean isBorderOpaque() {

            return true;

        }

        public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {

            g.drawRoundRect(x,y,width-1,height-1,radius,radius);

        }

    }




OUTPUT:-