首页 > 其他分享 >swt模拟radiobutton

swt模拟radiobutton

时间:2022-12-15 10:22:37浏览次数:42  
标签:selection return int text Image public radiobutton swt 模拟

  1 public class RadioButton extends Canvas {
  2 
  3     protected final Image RADIO_CHECKED = createImage("radiobutton_checked.png");
  4     protected final Image RADIO_UNCHECKED = createImage("radiobutton_unchecked.png");
  5  
  6     protected Image decrotorImage;//左侧图标
  7     protected String text = "RadioButton";//默认文字
  8     protected boolean selection;//选中状态
  9     protected int imageSize = 16;//默认图标大小
 10     
 11     private int mouse = 0;//鼠标状态
 12     private boolean hit = false;//碰撞
 13      
 14     /**
 15      * 
 16      * @param parent
 17      * @param style SWT.NONE
 18      */
 19     public RadioButton(Composite parent, int style) {
 20 
 21         super(parent, style);
 22         //默认未选中
 23         setDecrotorImage(RADIO_UNCHECKED);
 24 
 25         this.addPaintListener(new PaintListener() {
 26 
 27             //绘制按钮
 28             @Override
 29             public void paintControl(PaintEvent e) {
 30 
 31                 Rectangle rect = getBounds();
 32                 Color foreground = getForeground();
 33                 Color background = getBackground();
 34                 Font font = getFont();
 35 
 36                 e.gc.setBackground(background);
 37                 e.gc.setForeground(foreground);
 38                 e.gc.setFont(font);
 39 
 40                 //图片垂直居中
 41                 int imgX = 2;
 42                 int imgY = (rect.height - imageSize) / 2;
 43                 e.gc.drawImage(getDecrotorImage(), imgX, imgY);
 44 
 45                 //文字垂直居中
 46                 FontMetrics fontMetrics = e.gc.getFontMetrics();
 47                 int padding = 2;
 48                 int txtX = imgX + getDecrotorImage().getBounds().width + padding;
 49                 int txtY = (rect.height - fontMetrics.getHeight()) / 2;
 50                 e.gc.drawText(getText(), txtX, txtY - 1);
 51 
 52                 e.gc.dispose();
 53 
 54             }
 55         });
 56         this.addMouseListener(new MouseAdapter() {
 57             @Override
 58             public void mouseDown(MouseEvent e) {
 59                 hit = true;
 60                 mouse = 2;
 61                 // redraw();
 62             }
 63 
 64             @Override
 65             public void mouseUp(MouseEvent e) {
 66                 hit = false;
 67                 mouse = 1;
 68                 if (e.x < 0 || e.y < 0 || e.x > getBounds().width || e.y > getBounds().height) {
 69                     mouse = 0;
 70                 }
 71                 if (mouse == 1) {
 72                     setSelection(true);
 73                     //触发重绘
 74                     redraw(); 
 75                     notifyListeners(SWT.Selection, new Event());
 76                 } 
 77             }
 78         });
 79         this.setCursor(new Cursor(this.getDisplay(), SWT.CURSOR_HAND));
 80         
 81     }
 82 
 83     private static Image createImage(String name) {
 84         InputStream stream = RadioButton.class.getResourceAsStream(name);
 85         Image image = new Image(null, stream);
 86         try {
 87             stream.close();
 88         } catch (IOException ioe) {
 89         }
 90         return image;
 91     }
 92 
 93     public void setSelection(boolean selection) {
 94         if (this.selection == selection) {
 95             return;
 96         }
 97         this.selection = selection;
 98         //设置互斥
 99         if (selection) {
100             if (getParent() != null) {
101                 Control[] controls = getParent().getChildren();
102                 for (Control control : controls) {
103                     if (control instanceof RadioButton) {
104                         if (!(this == control))
105                             ((RadioButton) control).setSelection(false);
106                     }
107                 }
108             }
109         }
110         setDecrotorImage(selection ? RADIO_CHECKED : RADIO_UNCHECKED);
111         redraw();
112     }
113 
114     /**
115      * @param decrotorImage the decrotorImage to set
116      */
117     protected void setDecrotorImage(Image decrotorImage) { 
118         //对图片进行缩放
119         ImageData imageData = decrotorImage.getImageData();
120         ImageData newImageData = imageData.scaledTo(imageSize, imageSize);
121         Image scaledImage = new Image(getDisplay(), newImageData);  
122         this.decrotorImage = scaledImage;
123     }
124 
125     /**
126      * @return the decrotorImage
127      */
128     protected Image getDecrotorImage() {
129         return decrotorImage;
130     }
131     
132     
133     /**
134      * @param text the text to set
135      */
136     public void setText(String text) {
137         this.text = text;
138     }
139 
140 
141     /**
142      * @return the text
143      */
144     public String getText() {
145         return text;
146     }
147 
148     /**
149      * @return the selection
150      */
151     public boolean isSelection() {
152         return selection;
153     }
154 
155     public int getImageSize() {
156         return imageSize;
157     }
158 
159     public void setImageSize(int imageSize) {
160         this.imageSize = imageSize;
161     }
162 
163 }

 

标签:selection,return,int,text,Image,public,radiobutton,swt,模拟
From: https://www.cnblogs.com/gzhq/p/16984384.html

相关文章

  • 「SWTR-04」Lining up
    链接:https://www.luogu.com.cn/problem/P6212题目描述:有一个串,每个字符为\(A,B,?\)中的一个。\(?\)会是\(A,B\)中等概率随机的一个字符,若有一个点为\(A\),其后面的点为\(B......
  • 4路AI模拟量扩展io采集模块
    DAM模块可实现2/4路模拟量和2/4路热电阻PT100/PT1000温度信号测量。模块通讯接口为RS-485口,MODBUS-RTU通讯协议。DC9~36V电源供电。DAM模块可应用于各种工业自动......
  • 性能达1.5+倍!昇腾AI助力分子动力学模拟研究
    摘要:在异构计算架构CANN的助力下,AI预测性能达到现有产品的1.5+倍,可预测规模较传统方法提升10000+倍,为光伏材料、新能源电池、半导体材料研究带来巨大的商业应用价值。本文......
  • Unity 使用拖尾渲染器模拟简易的管道流体
    关于管道流体关于管道流体,最佳的解决方案肯定是UV动画无疑,在网上看过很多例子几乎都是这样的,毕竟用实时流体计算的话开销确实太大,用粒子系统的话又苦于难以表现出流体的粘稠......
  • 模拟量转PWM隔离转换器4-20mA/0-5V/0-10V/RS485输入比例阀门线性驱动器
    主要特性: 精度、线性度误差等级:0.1、0.2、0.5级 4-20mA/0-5V/0-10V等标准信号输入 可选择RS485通讯输入,支持Modbus协议 PWM信号输出,PWM频率可选 PWM输出驱动......
  • C++全国交通咨询模拟系统
    C++全国交通咨询模拟系统《数据结构课程设计》一、课设目的数据结构课程设计是一项综合性设计活动,要求利用本课程内的以及到目前为止所学到的有关知识和技术解决一些不......
  • C/C++简易图书管理模拟系统(二叉平衡树)
    C/C++简易图书管理模拟系统(二叉平衡树)C/C++简易图书管理模拟系统(二叉平衡树)数据结构课程实验教案第8页实验题目八:综合实验简易图书管理模拟系统 机时......
  • Selenium13--模拟键盘操作
    键盘操作概述自动化测试的本质使用程序运行代替对于网页的人工操作。用户在网页上操作时,可能会按下键盘上的各种按键。比如:输入登录账号信息后,直接在文本框里按下键......
  • Selenium14--模拟鼠标操作
    模拟鼠标操作在实际场景中,会有单击、长时间单击、双击、右击、拖放、移动等鼠标操作,或在当前光标位置的按键输入或鼠标操作。selenium提供了名为ActionChains的类来处理......
  • Jquery中的CheckBox、RadioButton、DropDownList的取值赋值实现代码
    由于Jquery的版本更新很快,代码的写法也改变了许多,以下Jquery代码适query1.4版本以上Radio 1.获取选中值,三种方法都可以:$('input:radio:checked').val();$("input[type='ra......