标签: jspinner

Java中奇怪的SpinnerNumberModel行为

我正在尝试使用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)

java swing jspinner

5
推荐指数
1
解决办法
1568
查看次数

JSpinner和double用点或逗号作为分隔符

我想允许"逗号"和"点"两者作为分隔符.

我可以在string中使用replace方法只获得一个分隔符,但问题是double值是JSpinner的值,我无法找到允许两个分隔符的任何方法.如果我将语言环境设置为例如法语只允许一个分隔符.

java double locale jspinner separator

5
推荐指数
1
解决办法
179
查看次数

像JTable单元格编辑器一样使用JSpinner

我正在使用JSpinner像表格单元格编辑器,我有一个恼人的问题:

单元格保持不可编辑模式,直到我点击它,因为不可编辑我的意思是我无法写入它(它没有焦点因此它不接受输入键盘)但我可以改变值 - 向下箭头(键盘).

那么,当我选择一个按键时,我必须做什么来集中我的表格?

除了那个问题,我的SpinnerEditor类运行得很好.

谢谢大家.

java swing focus jspinner tablecelleditor

4
推荐指数
1
解决办法
7731
查看次数

如何在JSpinner中获取所选项的值?

我正在创建一个使用最大数量为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)

java swing jspinner changelistener

4
推荐指数
1
解决办法
5万
查看次数

jSpinner时间选择器模型编辑

我有 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)

任何帮助表示赞赏。谢谢。

java swing jspinner timepicker

4
推荐指数
1
解决办法
2万
查看次数

多个JSpinner初始化不同

我的应用程序中有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)

java swing editor jspinner number-formatting

4
推荐指数
2
解决办法
237
查看次数

用Java填充微调器

你如何添加零填充JSpinner
由于微调器创建JFormattedTextField自身,我不能只将格式传递给JFormattedTextField构造函数.
有没有办法在现有的格式上设置JFormattedTextField

我想要的是:值= 37,编辑="0037"

更新:
我按照建议尝试了这个:

JSpinner mySpinner = new JSpinner();  
mySpinner.setEditor(  
    new JSpinner.NumberEditor(mySpinner, "####"));  
Run Code Online (Sandbox Code Playgroud)

并且结果对微调器数据的表示没有任何改变.这似乎是一个合理的解决方案; 有没有人试过这个,所以我可以肯定它只是我自己的应用程序中的一些片段?

java swing zero-pad jspinner

3
推荐指数
1
解决办法
1850
查看次数

Java Swing - JSpinner中的问题

我正在开发一个Java桌面应用程序,并在Netbeans Swing GUI构建器的帮助下设计GUI.

我想JSpinner在我的应用程序中使用a .我把它拖到了一个地方JPanel.现在,我想设置它的两个属性:

  • 首先,它应显示1到50范围内的数字.不小于1也不大于50.如何设置该范围?

  • 第二,当我试图通过spinner.getValue()它获得它的值时返回一个Object.正如我的飞旋的数据类型为整数,这将是更好的向下转换ObjectInteger或是否有任何其他方式来获得该数值?

java user-interface swing spinner jspinner

3
推荐指数
1
解决办法
6596
查看次数

使JSpinner只读取数字,但也检测退格

我正在尝试创建一个只接受数字的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写的.

java swing jspinner jformattedtextfield

3
推荐指数
1
解决办法
2837
查看次数

JSpinner采用双格式

我想创建支持非整数值的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)

java swing jspinner jformattedtextfield

3
推荐指数
1
解决办法
1万
查看次数