问题
I want to create rounded JButton in Java...
For that I use rounded image and placed that image on button but I didn't get rounded button..
please any one can tell how to create rounded button in Java like show in below figure..
thanks in advance.....
回答1:
If you're just going to use an image of a round button, then why not just use a JLabel
? That is, simply invoke setIcon(...), passing your BufferedImage
instance as an argument.
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);
}
}
OUTPUT
Keep in mind that you'll need to either programmatically make the background of your image transparent, or you'll need to use an image editing tool like Paint.NET.
回答2:
Any Shape using the image that set the transparent color to its shape JButton
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 ();
}
In the above sample, JButton creates a button by pasting a circular image.
Circular, the same size of PNG is an image (outside of the circle is transparent color) providing three types JButton set to
- setIcon
- setPressedIcon
- setRolloverIcon
- setContentAreaFilled (false) Set the like, it does not draw the button itself
It contains Override, if you click on the outside of the circle button so as not to react
- In this sample, and not necessarily that is generating the circle from the transmission color of the image, and prepares separate circular shapes the size of the image
- From the image of the transparent color, to set a clickable area, change the shape definition of the JComponent.
You can check the Runnable Jar file and full Source Code on GeekOnJava
回答3:
You need to write a "Look and Feel" (a theme for Java Swing). Not for the faint of heart but possible. I suggest to look at an existing theme.
LIQUIDLNF should be a good start.
回答4:
You can use JavaFX to define "Rich Graphic Components" example (rounded button with gradient): http://poligloci.blogspot.com/2009/07/beauty-and-beast-javafx-12-in-netbeans.html
来源:https://stackoverflow.com/questions/5120116/how-to-create-rounded-jbutton-in-java