永发信息网

如何禁止mui-slider的拖动,只需点击转换列表

答案:2  悬赏:10  手机版
解决时间 2021-03-16 05:52
如何禁止mui-slider的拖动,只需点击转换列表
最佳答案
我没系统学习过Jave Swing的相关知识,基本上靠摸索出来的一点经验,供参考。
1、可以通过编写MouseClickedCallback回调函数实现所需功能。其它或许还有更好的做法,但就我目前所知,可能MouseClickedCallback是比较合适的,因MousePressedCallback和MouseReleasedCallback也可能会和拖动滚动条操作冲突。

2、需要获取点击鼠标时的位置,这可以通过MouseClickedCallbackData数据获取。该数据中有相对控件的位置和绝对位置,我采用的做法是通过匹配MOUSE_CLICKED后面括号中的内容提取数据。数据为double类型,需首先转换为字符串进行匹配。

3、确定鼠标在滚动条中所对应的数据,有三点需要特别注意:
(1)滚动条的方向:由Orientation确定,0为横向(默认),1为纵向。
(2)边距:貌似横向和纵向不同,分别为15和10(不知是否有某属性可以获取该值)。
(3)垂直滚动条的数据是从下向上的,但鼠标位置则以上面为基准位置,需要进行一个简单的变换。

4、目前的局限:
(1)未区分鼠标的左键和右键。
(2)未考虑滚动条采用其它单位时的处理。
(3)就目前所实现的而言,可以看到有一个先滑动固定距离,然后再到达指定位置的过程,想不出有什么办法可以克服。

5、补充:
(1)点击位置在滚动条范围内时直接到达该位置,如果在两端点击,则仍按照滚动固定距离处理,这是有意为之;
(2)可以使用MouseReleasedCallback回调函数代替MouseClickedCallback,效果似乎没
有差别(注意获取数据的细节有些差别)。

参考代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

function slider_scorebar_click_callback(varargin)

d = get(gcbo);
m = char(d.MouseClickedCallbackData);
p = 'MOUSE_CLICKED,(';
m = char(d.MouseClickedCallbackData);
inx = strfind(m,p);
m = m(inx+length(p):end);
inx = strfind(m,')');
pos = str2num(m(1:inx(1)-1));
if ~d.Orientation % 横向
s = d.Width;
p = pos(1);
offset = 15;
else % 纵向
s = d.Height;
p = s - pos(2);
offset = 10;
end
if p >= offset && p <= s-offset
mx = d.Maximum;
mn = d.Minimum;
v=mn+(p-offset)/(s-2*offset)*(mx-mn);
set(gcbo,'value',v);
end

如果使用MouseReleasedCallback回调函数,参考代码为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

function slider_scorebar_release_callback(varargin)
d = get(gcbo);
m = char(d.MouseReleasedCallbackData);
p = 'MOUSE_RELEASED,(';
inx = strfind(m,p);
m = m(inx+length(p):end);
inx = strfind(m,')');
pos = str2num(m(1:inx(1)-1));
if ~d.Orientation % 横向
s = d.Width;
p = pos(1);
offset = 15;
else % 纵向
s = d.Height;
p = s - pos(2);
offset = 10;
end
if p >= offset && p <= s-offset
mx = d.Maximum;
mn = d.Minimum;
v=mn+(p-offset)/(s-2*offset)*(mx-mn);
set(gcbo,'value',v);
end
全部回答
任务占坑
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
相爱十年床戏在那集?
求哥特王朝2的火法师火之历练任务详解
伟达商贸地址在哪,我要去那里办事
蓝山到珠海的汽车几点钟开,多少钱?求大神帮
vivo27红包怎么照像
治安管理处罚的其他程序有哪些
别人说你基因好说明什么
爱乱了,心散了
集思吧的调查我怎么从来没有做成功过一个
南京金盾物业管理服务有限公司地址在哪,我要
1+2+3+4+...+2998+2999 判断结果是奇数还是
轻轻,清清,卿卿,倾倾,它们分别是什么意思
更改支付宝绑定邮箱只要邮箱验证可以吗不通过
苗族见面打招呼方式?求解答
洗澡真困难呀 有知道怎么回事的吗
推荐资讯
上黄马湖水库地址有知道的么?有点事想过去
肇港消防器材这个地址在什么地方,我要处理点
太原科技大学专科部在那
物极必反 成语故事
女孩子胸正中间有痣好吗?
夜时尚音乐酒吧在什么地方啊,我要过去处理事
单选题春秋时期,“礼乐征伐自天子出”变为“
我离开了家乡,也知道了电话是怎么回事。 我
对取保候审不服,该怎么办呢?
蒸车能蒸米皮吗
河南镇平县黑龙集太平观村余永超
协旅汽车租赁地址在什么地方,想过去办事
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?