我正在尝试使用SpinnerNumberModel设置JSpinner,其值为0.0005,min = 0.0,max = 1.0,步长= 0.0005.但是,当我使用这些参数创建一个微调器时,我会发现非常奇怪的行为.每次单击向上箭头,而不是从0.0005开始并增加0.0005,该值似乎保持为0.
为了确保这不仅仅是格式化问题,我在每次更改事件后打印出微调器的值.当然,每次单击向上箭头,控制台都会将值显示为0,然后显示0.0005,无论旋转器被点击多少次.
下面是我用来测试它的代码,包括一个值略有不同的微调器,可以很好地用于比较.
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(200, 80);
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
final JSpinner spinner1 = new JSpinner(new SpinnerNumberModel(0.0005, 0.0, 1.0, 0.0005));
final JSpinner spinner2 = new JSpinner(new SpinnerNumberModel(0.05, 0.0, 1.0, 0.05));
panel.add(spinner1, BorderLayout.NORTH);
panel.add(spinner2, BorderLayout.SOUTH);
frame.add(panel);
spinner1.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
System.out.println("spinner1: " + ((Number) spinner1.getValue()).doubleValue());
}
}); …Run Code Online (Sandbox Code Playgroud) 我想允许"逗号"和"点"两者作为分隔符.
我可以在string中使用replace方法只获得一个分隔符,但问题是double值是JSpinner的值,我无法找到允许两个分隔符的任何方法.如果我将语言环境设置为例如法语只允许一个分隔符.
我正在使用JSpinner像表格单元格编辑器,我有一个恼人的问题:
单元格保持不可编辑模式,直到我点击它,因为不可编辑我的意思是我无法写入它(它没有焦点因此它不接受输入键盘)但我可以改变值 - 向下箭头(键盘).
那么,当我选择一个按键时,我必须做什么来集中我的表格?
除了那个问题,我的SpinnerEditor类运行得很好.
谢谢大家.
我正在创建一个使用最大数量为30的JSpinner的应用程序,我应该从这个JSpinner中选择一个值并将一个String带到JTextField,结果将出现在Textarea中,当我编译时我有很多关于该方法的问题jSpinner1State,任何人都可以帮助我,因为我不知道我的问题在哪里.这是我的方法JSpinner的代码:
jSpinner1.addChangeListener(this);
private void jSpinner1StateChanged(javax.swing.event.ChangeEvent evt) {
// TODO add your handling code here:
Object sp=jSpinner1.getValue();
int i =Integer.parseInt(sp.toString() );
String targetIP=jTextField1.getText();
try{
jSpinner1StateChanged(evt);
String cmd = "tracert -h "+i+ "" +targetIP;
Process p = Runtime.getRuntime().exec(cmd);
InputStream in = p.getInputStream();
StringBuilder build = new StringBuilder();
Reader reader = new InputStreamReader(in);
char[] buffer = new char[512];
int nbRead = reader.read(buffer);
while(nbRead > 0) {
build.append(buffer, 0, nbRead);
nbRead = reader.read(buffer);
}
String response = build.toString();
jTextArea1.setText(response);
}catch(Exception e){
jTextArea1.append(e.toString()); }
}
Run Code Online (Sandbox Code Playgroud) 我有 jSpinner 用于时间选择。 问题 1:用户可以编辑小时、分钟和秒分隔符“:”,并且可以写入额外的数字,如“123” 问题 2:模型始终获取当前时间。我想要“00:00:00”当我在代码中编写此内容而不是“hh:mm:ss”时,用户无法编辑这些值。
我的守则是;
spinner1 = new javax.swing.JSpinner();
SpinnerDateModel spinnermodel = new SpinnerDateModel();
spinnermodel.setCalendarField(Calendar.MINUTE);
spinner1 .setModel(spinnermodel);
spinner1 .setEditor(new JSpinner.DateEditor(spinner1 , "hh:mm:ss"));
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏。谢谢。
我的应用程序中有2个JSpinner,我为它们设置了模型,编辑器,数字格式.但是,当我运行应用程序时,第二个应用程序最初不会显示小数部分.这看起来像聚焦问题.
所以首先初始化0.0但第二个初始化为0; 我希望第二个与第一个相同.我想念这一步吗?这是我的代码如下.

这是我的代码
import java.text.DecimalFormat;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
public class NewJFrame extends javax.swing.JFrame {
private final JSpinner.NumberEditor editor;
DecimalFormat format , format2 ;
private final JSpinner.NumberEditor editor1;
/**
* Creates new form NewJFrame
*/
public NewJFrame() {
initComponents();
SpinnerNumberModel model1 = new SpinnerNumberModel(0.0,-1000.0 ,1000.0,0.1);
this.jSpinner1.setModel(model1);
editor = new JSpinner.NumberEditor(this.jSpinner1);
this.jSpinner1.setEditor(editor);
format = editor.getFormat();
format.setMinimumFractionDigits(1);
SpinnerNumberModel model2 = new SpinnerNumberModel(0.0,-1000.0 ,1000.0,0.1);
this.jSpinner2.setModel(model2);
editor1 = new JSpinner.NumberEditor(this.jSpinner2);
this.jSpinner2.setEditor(editor1);
format2 = editor1.getFormat();
format2.setMinimumFractionDigits(1);
}
/**
* This method is called from …Run Code Online (Sandbox Code Playgroud) 你如何添加零填充JSpinner?
由于微调器创建JFormattedTextField自身,我不能只将格式传递给JFormattedTextField构造函数.
有没有办法在现有的格式上设置JFormattedTextField?
我想要的是:值= 37,编辑="0037"
更新:
我按照建议尝试了这个:
JSpinner mySpinner = new JSpinner();
mySpinner.setEditor(
new JSpinner.NumberEditor(mySpinner, "####"));
Run Code Online (Sandbox Code Playgroud)
并且结果对微调器数据的表示没有任何改变.这似乎是一个合理的解决方案; 有没有人试过这个,所以我可以肯定它只是我自己的应用程序中的一些片段?
我正在开发一个Java桌面应用程序,并在Netbeans Swing GUI构建器的帮助下设计GUI.
我想JSpinner在我的应用程序中使用a .我把它拖到了一个地方JPanel.现在,我想设置它的两个属性:
首先,它应显示1到50范围内的数字.不小于1也不大于50.如何设置该范围?
第二,当我试图通过spinner.getValue()它获得它的值时返回一个Object.正如我的飞旋的数据类型为整数,这将是更好的向下转换Object成Integer或是否有任何其他方式来获得该数值?
我正在尝试创建一个只接受数字的JSpinner,但我也想让它读取/响应退格.
public class test {
JFrame frame;
JPanel panel;
JSpinner spinner;
public test()
{
frame = new JFrame("test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setPreferredSize(new Dimension(200,200));
panel = new JPanel();
SpinnerNumberModel numSpin = new SpinnerNumberModel(10, 0,1000,1);
spinner = new JSpinner(numSpin);
JFormattedTextField txt = ((JSpinner.NumberEditor) spinner.getEditor()).getTextField();
((NumberFormatter) txt.getFormatter()).setAllowsInvalid(false);
panel.add(spinner);
frame.setContentPane(panel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args)
{
test test = new test();
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码只能编号,但这不允许我退格.我在这个网站上找到了一些例子,但是他们是为C写的.
我想创建支持非整数值的JSpinner,例如2.01和-3.456,因此getValue()返回一个Double.
不仅如此,我希望步长应该是动态的,使用类似下面的公式(10%的大小):
stepSize = 0.1 * pow(10, round( log(currentValue) ));
Run Code Online (Sandbox Code Playgroud)
可能吗?或者我应该问,麻烦值得吗?
通过改编Vishal的答案,我制作了以下课程来制作漂亮的双旋转器.到目前为止,他们已经证明在我的程序中工作得很好,尽管我会将自适应步长抽象到另一个父类中,以便我可以在以后制作AdaptiveDoubleSpinners和AdaptiveIntegerSpinners.
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class DoubleSpinner extends JSpinner {
private static final long serialVersionUID = 1L;
private static final double STEP_RATIO = 0.1;
private SpinnerNumberModel model;
public DoubleSpinner() {
super();
// Model setup
model = new SpinnerNumberModel(0.0, -1000.0, 1000.0, 0.1);
this.setModel(model);
// Step recalculation
this.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
Double value = getDouble();
// Steps are sensitive to …Run Code Online (Sandbox Code Playgroud)