gpt4 book ai didi

java - 为什么我的 JSlider 没有改变值?

转载 作者:行者123 更新时间:2023-11-29 04:50:44 25 4
gpt4 key购买 nike

我正在尝试编写我的程序,以便可以将在 JTextfield 中输入的整数值存储到变量中。然后,当单击 JButton 时,此变量可以告诉 JSlider 将其头部移动到变量中存储的整数值的头部。我的类(class)名称是 Camera.Java代码没有显示任何错误,但是如果我单击我的 JButton,什么也没有发生,相反我在控制台中看到了这个错误:

Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:504)
at java.lang.Integer.parseInt(Integer.java:527)
at Camera.main(Camera.java:67)

我的代码:

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Hashtable;
import java.util.Scanner;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JPanel;
import javax.swing.*;

public class Camera {

static JButton addtolist;
static Scanner input = new Scanner(System.in);
static JSlider cam = new JSlider();
static JTextField enterval = new JTextField();
static int x ;

public static void main (String args[]){
JFrame myFrame = new JFrame ("Matthew Damon on Mars");
myFrame.setSize(300, 600);

JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER));
JLabel userinp = new JLabel("Enter input: ");

cam = new JSlider(0, 15, 0);
cam.setPaintLabels(true);

enterval.setPreferredSize(new Dimension(100,80));

addtolist = new JButton("Enter");
addtolist.setPreferredSize(new Dimension(50,20));
JTextField enterval1 = new JTextField();

panel.add(addtolist);

Hashtable<Integer, JLabel> table = new Hashtable<Integer, JLabel>();
table.put(0, new JLabel("0"));
table.put(1, new JLabel("1"));
table.put(2, new JLabel("2"));
table.put(3, new JLabel("3"));
table.put(4, new JLabel("4"));
table.put(5, new JLabel("5"));
table.put(6, new JLabel("6"));
table.put(7, new JLabel("7"));
table.put(8, new JLabel("8"));
table.put(9, new JLabel("9"));
table.put(10, new JLabel("A"));
table.put(11, new JLabel("B"));
table.put(12, new JLabel("C"));
table.put(13, new JLabel("D"));
table.put(14, new JLabel("E"));
table.put(15, new JLabel("F"));
cam.setLabelTable(table);

myFrame.add(cam, BorderLayout.SOUTH);
myFrame.add(userinp, BorderLayout.NORTH);
myFrame.add(enterval1, BorderLayout.NORTH);
myFrame.add(panel, BorderLayout.CENTER);

myFrame.setVisible(true);
buttonAction();

}





public static void buttonAction() {

addtolist.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

try {
int x = Integer.parseInt(enterval.getText());
cam.setValue(x);
} catch (NumberFormatException npe) {
// show a warning message
}
}

});
}

}

最佳答案

您在程序创建时设置x 在用户有任何机会更改其值之前。从 actionPerformed 方法中获取文本值,该方法应该在用户已经选择一个值之后,将其解析为一个数字并使用该值设置 slider 。

    public void actionPerformed(ActionEvent e) {

try {
int x = Integer.parseInt(enterval.getText());
cam.setValue(x);
} catch (NumberFormatException npe) {
// show a warning message
}
}

然后摆脱所有那些静态的废话。此处唯一应该是静态的方法是 main,它除了创建一个实例并将其设置为可见外什么都不做。

请注意,使用 JSpinnerJFormattedTextField 比使用 JTextField 更好,或者如果您真的卡住了,可以使用 DocumentFilter 限制用户可以输入的内容

关于java - 为什么我的 JSlider 没有改变值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35518053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com