我当前正在MATLAB UI中创建Java Swing JSlider
。我的滑块的最小值和最大值分别为0.0和10.0。我注意到滑块的指针/插入符号/钻石仅捕捉到整数值。即,不可能将滑块设置为例如5.5的值。对于我的应用程序来说,这种行为不是特别理想。
这是我目前的代码:
hFig = figure(1);
hC = uicomponent('style','javax.swing.jslider','position',[10 10 400 200]);
hC.JavaComponent.setPaintLabels(true);
hC.JavaComponent.setPaintTicks(true);
hC.JavaComponent.setMinimum(0);
hC.JavaComponent.setMaximum(10);
hC.JavaComponent.setValue(5);
hC.JavaComponent.setMajorTickSpacing(2);
hC.JavaComponent.setMinorTickSpacing(1);
hC.JavaComponent.SnapToTicks(false);
hC.JavaComponent
是对实际Java滑块对象的引用。函数uicomponent()
用于在MATLAB图形中实例化Java Swing对象。由于我直接使用Java对象,因此我的直觉是我在MATLAB中工作并不是很重要,但是我可能会错。
因此,我的问题是:
答案 0 :(得分:0)
我想出了一个最适合我要尝试的答案。这与之前提出的缩放比例概念类似:
function hC = createDecimalSlider(hFig, resolution, position, min, max, value, majorTickSpace, minorTickSpace)
factor = 1/resolution;
sMin = min*factor;
sMax = max*factor;
sValue = value*factor;
sMajorTick = majorTickSpace*factor;
sMinorTick = minorTickSpace*factor;
hC = uicomponent(hFig, 'style','javax.swing.jslider','position',position);
hC.JavaComponent.setPaintLabels(true);
hC.JavaComponent.setPaintTicks(true);
hC.JavaComponent.setMinimum(sMin);
hC.JavaComponent.setMaximum(sMax);
hC.JavaComponent.setValue(sValue);
hC.JavaComponent.setMajorTickSpacing(sMajorTick);
hC.JavaComponent.setMinorTickSpacing(sMinorTick);
hC.JavaComponent.setExtent(0);
hC.JavaComponent.SnapToTicks(false);
fH = @(src,evt) setUD(src,evt, hC, factor);
hC.JavaComponent.StateChangedCallback = fH;
fH(hC.JavaComponent,[]);
labels = java.util.Hashtable();
for(tick = sMin:sMajorTick:sMax)
num = tick/factor;
str = num2str(num);
labels.put(cast(tick,'int32'), javax.swing.JLabel(str));
end
hC.JavaComponent.setLabelTable(labels);
end
function setUD(hjSlider,~, hC, factor)
hC.UserData = hjSlider.getValue()/factor;
end
将调用该函数并创建滑块,如下所示:
hFig = figure(1);
hC = createDecimalSlider(hFig, 1E-6, [10 10 400 50], 0,10,5.005,1,0.25);
然后按如下方式检索值:
value = hC.UserData;
这不是解决问题的绝妙方法,但希望它也能帮助其他人。