4
A
回答
12
這裏有一個快速和骯髒的演示:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class Main {
public static void main(String[] args) {
final JFrame frame = new JFrame();
final JTextField text = new JTextField(20);
final JSlider slider = new JSlider(0, 100, 0);
slider.addChangeListener(new ChangeListener(){
@Override
public void stateChanged(ChangeEvent e) {
text.setText(String.valueOf(slider.getValue()));
}
});
text.addKeyListener(new KeyAdapter(){
@Override
public void keyReleased(KeyEvent ke) {
String typed = text.getText();
slider.setValue(0);
if(!typed.matches("\\d+") || typed.length() > 3) {
return;
}
int value = Integer.parseInt(typed);
slider.setValue(value);
}
});
frame.setLayout(new BorderLayout());
frame.add(text, BorderLayout.NORTH);
frame.add(slider, BorderLayout.CENTER);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.pack();
}
}
編輯
如果你想使用浮點數(如標題所暗示的),你可以擴展JSlider類的這樣的:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.text.DecimalFormat;
public class Main {
public static void main(String[] args) {
final DecimalFormat df = new DecimalFormat("0.####");
final JFrame frame = new JFrame();
final JTextField text = new JTextField(20);
final DoubleJSlider slider = new DoubleJSlider(0, 100, 0, 1000);
slider.addChangeListener(new ChangeListener(){
@Override
public void stateChanged(ChangeEvent e) {
text.setText(df.format(slider.getScaledValue()));
}
});
text.addKeyListener(new KeyAdapter(){
@Override
public void keyReleased(KeyEvent ke) {
String typed = text.getText();
slider.setValue(0);
if(!typed.matches("\\d+(\\.\\d*)?")) {
return;
}
double value = Double.parseDouble(typed)*slider.scale;
slider.setValue((int)value);
}
});
frame.setLayout(new BorderLayout());
frame.add(text, BorderLayout.NORTH);
frame.add(slider, BorderLayout.CENTER);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.pack();
}
}
class DoubleJSlider extends JSlider {
final int scale;
public DoubleJSlider(int min, int max, int value, int scale) {
super(min, max, value);
this.scale = scale;
}
public double getScaledValue() {
return ((double)super.getValue())/this.scale;
}
}
上面的例子表示在100個步驟中0到0.1之間的間隔。
這(再次)只是一個快速和骯髒的例子,但可能會幫助你的方式。
相關問題
- 1. 鏈接jcombobox值與jtextfield值
- 2. Java JSlider設定值
- 3. Java JTextfield焦點
- 4. JTextField中的超鏈接
- 5. JAVA jslider的setValue
- 6. 浮點運算和浮點值比較
- 7. json_decode和浮點值
- 8. JTextField和JSlider之間的相互作用 - DocumentListener會混淆
- 9. 浮點值解析Java中
- 10. color java基於tick值的JSlider
- 11. Java GUI JSlider
- 12. 具有接近雙精度值的JSlider
- 13. Java獲取幾個浮點數的最小值和最大值
- 14. css - 浮點數右鍵禁用鏈接
- 15. 鏈接錯誤浮點格式不掛
- 16. Java的插值與搜索浮點數
- 17. 在java中乘以-1的浮點值
- 18. 擊浮點和負值
- 19. 貓鼬和浮點值
- 20. PHP和零值浮點數
- 21. Java GUI - 顯示JTextField值
- 22. JButton和JTextField的連接?
- 23. 安卓的LayoutParams不接受浮點值
- 24. Circle JSlider - Java程序
- 25. C#:如何將浮點值整理爲最接近的浮點值?
- 26. Java - 將JTextField變量與另一個類變量鏈接
- 27. Java庫特徵值浮點數
- 28. 比較積分值和浮點值
- 29. Java JLabel和JTextField定位
- 30. 與浮點值
相關http://stackoverflow.com/questions/2172574/jslider-for-doubles –