java GUI 自定义图形形状(按钮)
2009-07-07 16:18
218 查看
package book.Graphics;
import java.awt.*;
import java.awt.geom.*;//注意此包加载
import javax.swing.*;
/**
* 制作一个圆形按钮时,需要做两件事:
* 第一件事是重载一个适合的绘图方法以画出一个图形
* 第二件事是设置一些事件使得只有当单击图形按钮的范围中的时候才会做出响应*/
public class CircleButton extends JButton{
public CircleButton(String label){
super(label);
Dimension size=getPreferredSize();//获取按钮的最佳大小
//调整按钮的大小,使之变成一个方形
size.width=size.height=Math.max(size.width,size.height);
setPreferredSize(size);
//使jbutton不画背景,即不显示方形背景,而允许我们画一个圆的背景
setContentAreaFilled(false);
}
//画图的按钮的背景和标签
protected void paintComponent(Graphics g){
if(getModel().isArmed()){
//getModel方法返回鼠标的模型ButtonModel
//如果鼠标按下按钮,则buttonModel的armed属性为真
g.setColor(Color.LIGHT_GRAY);
}else{
//其他事件用默认的背景色显示按钮
g.setColor(getBackground());
}
//fillOval方法画一个矩形的内切椭圆,并且填充这个椭圆
//当矩形为正方形时,画出的椭圆便是圆
g.fillOval(0,0,getSize().width-1,getSize().height-1);
//调用父类的paintComponent画按钮的标签和焦点所在的小矩形
super.paintComponents(g);
}
//用简单的弧充当按钮的边界
protected void paintBorder(Graphics g){
g.setColor(getForeground());
//drawOval方法画矩形的内切椭圆,但不填充,只画出一个边界
g.drawOval(0,0,getSize().width-1,getSize().height-1);
}
Shape shape;//用于保存按钮的形状,有助于侦听单击按钮事件
//判断鼠标是否点在按钮上
public boolean contains(int x,int y){
//如果按钮边框,位置发生改变,则产生一个新的形状对象
if((shape==null)||(!shape.getBounds().equals(getBounds()))){
//构造椭圆型对象
shape=new Ellipse2D.Float(0,0,getWidth(),getHeight());
}
//判断鼠标的x,y坐标是否落在按钮形状内
return shape.contains(x,y);
}
public static void main(String[] args){
JButton button=new CircleButton("Click me");//产生一个圆形按钮
button.setBackground(Color.green);//设置背景色为绿色
//产生一个框架显示这个按钮
JFrame. frame=new JFrame("图形按钮");
frame.getContentPane().setBackground(Color.yellow);
frame.getContentPane().setLayout(new FlowLayout());
frame.getContentPane().add(button);
frame.setSize(200,200);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
(liuzhibao2008申明:含有注释的程序,本人只能尽力校准,望原谅!!!)
import java.awt.*;
import java.awt.geom.*;//注意此包加载
import javax.swing.*;
/**
* 制作一个圆形按钮时,需要做两件事:
* 第一件事是重载一个适合的绘图方法以画出一个图形
* 第二件事是设置一些事件使得只有当单击图形按钮的范围中的时候才会做出响应*/
public class CircleButton extends JButton{
public CircleButton(String label){
super(label);
Dimension size=getPreferredSize();//获取按钮的最佳大小
//调整按钮的大小,使之变成一个方形
size.width=size.height=Math.max(size.width,size.height);
setPreferredSize(size);
//使jbutton不画背景,即不显示方形背景,而允许我们画一个圆的背景
setContentAreaFilled(false);
}
//画图的按钮的背景和标签
protected void paintComponent(Graphics g){
if(getModel().isArmed()){
//getModel方法返回鼠标的模型ButtonModel
//如果鼠标按下按钮,则buttonModel的armed属性为真
g.setColor(Color.LIGHT_GRAY);
}else{
//其他事件用默认的背景色显示按钮
g.setColor(getBackground());
}
//fillOval方法画一个矩形的内切椭圆,并且填充这个椭圆
//当矩形为正方形时,画出的椭圆便是圆
g.fillOval(0,0,getSize().width-1,getSize().height-1);
//调用父类的paintComponent画按钮的标签和焦点所在的小矩形
super.paintComponents(g);
}
//用简单的弧充当按钮的边界
protected void paintBorder(Graphics g){
g.setColor(getForeground());
//drawOval方法画矩形的内切椭圆,但不填充,只画出一个边界
g.drawOval(0,0,getSize().width-1,getSize().height-1);
}
Shape shape;//用于保存按钮的形状,有助于侦听单击按钮事件
//判断鼠标是否点在按钮上
public boolean contains(int x,int y){
//如果按钮边框,位置发生改变,则产生一个新的形状对象
if((shape==null)||(!shape.getBounds().equals(getBounds()))){
//构造椭圆型对象
shape=new Ellipse2D.Float(0,0,getWidth(),getHeight());
}
//判断鼠标的x,y坐标是否落在按钮形状内
return shape.contains(x,y);
}
public static void main(String[] args){
JButton button=new CircleButton("Click me");//产生一个圆形按钮
button.setBackground(Color.green);//设置背景色为绿色
//产生一个框架显示这个按钮
JFrame. frame=new JFrame("图形按钮");
frame.getContentPane().setBackground(Color.yellow);
frame.getContentPane().setLayout(new FlowLayout());
frame.getContentPane().add(button);
frame.setSize(200,200);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
(liuzhibao2008申明:含有注释的程序,本人只能尽力校准,望原谅!!!)
相关文章推荐
- java自定义按钮外观
- Flex实现自定义图形按钮+按钮区域响应
- java之 22天 GUI 图形界面编程(一)
- java之 22天 GUI 图形界面编程(二)
- atitit.GUI图片非规则按钮跟动态图片切换的实现模式总结java .net c# c++ web html js
- java学习笔记图形程序设计及GUI应用小结(1)
- 制作自定义背景Button按钮、自定义形状Button的全攻略
- Android应用开发笔记(10):制作自定义背景Button按钮、自定义形状Button的全攻略
- Android之自定义背景按钮、自定义形状按钮
- Android应用开发笔记(10):制作自定义背景Button按钮、自定义形状Button的全攻略
- 第二十二天-Java_GUI(图形界面)
- 【Java GUI】图形用户接口总结(2)
- 黑马程序员--java笔记13--图形用户接口GUI
- Java开发GUI之图形绘制
- Java基础---GUI(用户图形界面)(黑马程序员)
- JAVA GUI 开发---水晶图片按钮
- 双按钮双事件监听机制的简单java GUI
- MFC图形按钮/自定义颜色
- 制作自定义背景Button按钮、自定义形状Button的全攻略
- 十一:Java之GUI图形Awt和Swing