我想創建一個JSlider只有四個可能的值:10(分鐘),30,60和100(最大)。是否有可能創建一個只能「捕捉」這些值?如果是這樣,你能舉個例子嗎?謝謝!可以在JSlider中捕捉特定值嗎?
2
A
回答
4
下面的例子可能是最簡單的方法來做你想找的。請注意,您不能簡單地重寫JSlider子類上的getValue()以返回特定於域的值,因爲這對於基礎JSlider/BasicSliderUI實現有問題。在這個例子中,我定義了一個自定義的getDomainValue()來根據滑塊滴答位置返回特定於域的值(10,30,60或100)。
package example.stackoverflow;
import java.util.Hashtable;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JSlider;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class SteppingSliderExample
{
public static class SteppingSlider extends JSlider
{
private static final long serialVersionUID = -1195270044097152629L;
private static final Integer[] VALUES = { 10, 30, 60, 100 };
private static final Hashtable<Integer, JLabel> LABELS = new Hashtable<>();
static
{
for(int i = 0; i < VALUES.length; ++i)
{
LABELS.put(i, new JLabel(VALUES[i].toString()));
}
}
public SteppingSlider()
{
super(0, VALUES.length - 1, 0);
setLabelTable(LABELS);
setPaintTicks(true);
setPaintLabels(true);
setSnapToTicks(true);
setMajorTickSpacing(1);
}
public int getDomainValue()
{
return VALUES[getValue()];
}
}
public static void createAndShowGUI()
{
JFrame frame = new JFrame("SteppingSlider");
frame.setSize(500, 120);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final SteppingSlider steppingSlider = new SteppingSlider();
final String labelPrefix = "Slider value: ";
final JLabel output = new JLabel(labelPrefix + steppingSlider.getDomainValue());
steppingSlider.addChangeListener(new ChangeListener()
{
@Override
public void stateChanged(ChangeEvent evt)
{
output.setText(labelPrefix + steppingSlider.getDomainValue());
}
});
frame.getContentPane().setLayout(
new BoxLayout(frame.getContentPane(),
BoxLayout.Y_AXIS));
frame.getContentPane().add(steppingSlider);
frame.getContentPane().add(output);
frame.setVisible(true);
}
public static void main(String[] args) throws Exception
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
createAndShowGUI();
}
});
}
}
+0
你的例子正是我一直在尋找的!感謝您向我展示如何做到這一點。 :) –
-1
編寫一個覆蓋getValue()的JSlider的子類, [1,2,3,4](原始)到[10,30,60,100]。我想到的最簡單的解決方案。
+0
這是非常危險的,因爲這會改變' JSlider'(它在內部也可以訪問它的'getValue()'方法)。 – brimborium
相關問題
- 1. 可以捕捉java.util.zip.ZipError嗎?
- 2. webworker可以捕捉觸摸輸入嗎?
- 3. broadcastReceiver可以捕捉多個廣播嗎?
- 4. WH_MOUSE可以捕捉全局事件嗎?
- 5. Force Flex 4 Spark Hslider捕捉特定值?
- 6. struts2的迭代器捕捉特定值
- 7. 捕捉特定的異常
- 8. 捕捉特定元素
- 9. 我可以在玻璃imerssions中捕捉語音觸發嗎?
- 10. 使用Observable.ajax.post可以捕捉'正確/自定義'錯誤嗎?
- 11. 錯誤捕捉,我可以中斷並停止進程嗎?
- 12. Clojure可以從現有流程中捕捉標準嗎?
- 13. 捕捉值
- 14. 捕捉Outlook.OlInspectorClose值
- 15. 如何捕捉它們中的某些特定行和SUM值?
- 16. WPF中的Slider控件如何捕捉特定值?
- 17. java - 在特定時刻捕捉checkbutton的值
- 18. 我可以在Android中以編程方式捕捉Volley Debug消息嗎?
- 19. Java JSlider設定值
- 20. 在java中捕捉方法嗎?
- 21. 的Python:捕捉特定的異常
- 22. Awk與特定格式的捕捉線
- 23. 捕捉到特定的網格位置
- 24. 如何捕捉特定的錯誤
- 25. SIGINT不可捕捉,在python
- 26. 我可以在列表<T>中搜索特定值嗎?
- 27. 我可以通過程序捕捉場景快照嗎?
- 28. 我可以用紅寶石捕捉控件-q和控件嗎?
- 29. Ext JS可以捕捉/拖放/調整UI大小嗎?
- 30. 可以resharper(2016.1 C#)建議異常捕捉try catch塊嗎?
是否有你想要不一致增加滴答的原因? 10,40,70,100不符合您的需求? – JBuenoJr
是的,你可以。你需要一個自定義的'DefaultBoundedRangeModel'來管理這些值和'BasicSliderUI'的一個實現來管理步進......在那裏我停止了嘗試...... – MadProgrammer