如何在 Java Swing 中为 JTextfield 设置数字范围(1-150 之间)
how to set a range of number (between 1-150) for a JTextfield in Java Swing
我正在编写一个 GUI 应用程序来输入工件的高度宽度和长度。当用户单击 "Test" 按钮时,如果字段为空并且输入大于 150,则应警告(通过 jlabel)。我正在努力解决一个问题 here.The 问题是它可以工作,但是当我 运行 根据数字格式编写程序时会出现很多警告。此外,当我单击 "Test" 按钮并且 JTextfield 为空时,它不会显示任何警告,但它只是忽略了这部分代码。我该如何解决这些问题?有没有更好的方法?
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.JScrollPane;
import javax.swing.UIManager;
import javax.swing.JOptionPane;
public class Machine_LearningApp {
private JFrame frame;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Machine_LearningApp window = new Machine_LearningApp();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public Machine_LearningApp() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(200, 200, 1182, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
frame.setTitle("Machine Learning Applikation");
frame.getContentPane().setLayout(null);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
frame.setSize(screenSize);
frame.setVisible(true);
JLabel lblNewLabel = new JLabel("Workpiece recognition ");
lblNewLabel.setAutoscrolls(true);
lblNewLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
lblNewLabel.setHorizontalTextPosition(SwingConstants.CENTER);
lblNewLabel.setOpaque(true);
lblNewLabel.setForeground(new Color(255, 255, 255));
lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
lblNewLabel.setFont(new Font("Tahoma", Font.BOLD, 37));
lblNewLabel.setBackground(new Color(0, 51, 102));
lblNewLabel.setBounds(0, 0, 1440, 85);
frame.getContentPane().add(lblNewLabel);
JLabel lblHheDesBauteiles = new JLabel("Height");
lblHheDesBauteiles.setForeground(new Color(255, 255, 255));
lblHheDesBauteiles.setFont(new Font("Tahoma", Font.PLAIN, 15));
lblHheDesBauteiles.setBounds(769, 246, 158, 36);
frame.getContentPane().add(lblHheDesBauteiles);
JLabel lblNewLabel_1 = new JLabel("Width");
lblNewLabel_1.setForeground(new Color(255, 255, 255));
lblNewLabel_1.setFont(new Font("Tahoma", Font.PLAIN, 15));
lblNewLabel_1.setBounds(769, 352, 158, 36);
frame.getContentPane().add(lblNewLabel_1);
JLabel lblLngeDesBauteiles = new JLabel("Length");
lblLngeDesBauteiles.setForeground(new Color(255, 255, 255));
lblLngeDesBauteiles.setFont(new Font("Tahoma", Font.PLAIN, 15));
lblLngeDesBauteiles.setBounds(769, 474, 158, 36);
frame.getContentPane().add(lblLngeDesBauteiles);
JLabel lblBitteDieAngaben = new JLabel("Please enter here:");
lblBitteDieAngaben.setForeground(new Color(255, 255, 255));
lblBitteDieAngaben.setFont(new Font("Shree Devanagari 714", Font.ITALIC, 18));
lblBitteDieAngaben.setBounds(896, 131, 395, 37);
frame.getContentPane().add(lblBitteDieAngaben);
JLabel lblNewLabel_2 = new JLabel("mm");
lblNewLabel_2.setHorizontalAlignment(SwingConstants.CENTER);
lblNewLabel_2.setHorizontalTextPosition(SwingConstants.CENTER);
lblNewLabel_2.setOpaque(true);
lblNewLabel_2.setBounds(1232, 249, 42, 33);
frame.getContentPane().add(lblNewLabel_2);
JLabel lblNewLabel_2_1 = new JLabel("mm");
lblNewLabel_2_1.setOpaque(true);
lblNewLabel_2_1.setHorizontalTextPosition(SwingConstants.CENTER);
lblNewLabel_2_1.setHorizontalAlignment(SwingConstants.CENTER);
lblNewLabel_2_1.setBounds(1232, 355, 42, 33);
frame.getContentPane().add(lblNewLabel_2_1);
JLabel lblNewLabel_2_2 = new JLabel("mm");
lblNewLabel_2_2.setOpaque(true);
lblNewLabel_2_2.setHorizontalTextPosition(SwingConstants.CENTER);
lblNewLabel_2_2.setHorizontalAlignment(SwingConstants.CENTER);
lblNewLabel_2_2.setBounds(1232, 477, 42, 33);
frame.getContentPane().add(lblNewLabel_2_2);
JLabel leeresFeld = new JLabel("");
leeresFeld.setFont(new Font("Lucida Grande", Font.BOLD | Font.ITALIC, 13));
leeresFeld.setHorizontalAlignment(SwingConstants.CENTER);
leeresFeld.setForeground(new Color(220, 20, 60));
leeresFeld.setBounds(954, 523, 320, 36);
frame.getContentPane().add(leeresFeld);
JTextField Feld1 = new JTextField();
Feld1.setSelectionColor(Color.GRAY);
Feld1.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
char c = e.getKeyChar();
if (!(Character.isDigit(c) || (c == KeyEvent.VK_BACK_SPACE) || (c == KeyEvent.VK_DELETE))) {
e.consume();
}
}
@Override
public void keyReleased(KeyEvent e) {
leeresFeld.setText(" ");
}
});
Feld1.setBounds(1022, 247, 143, 35);
frame.getContentPane().add(Feld1);
Feld1.setColumns(10);
JTextField Feld2 = new JTextField();
Feld2.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
char c = e.getKeyChar();
if (!(Character.isDigit(c) || (c == KeyEvent.VK_BACK_SPACE) || (c == KeyEvent.VK_DELETE))) {
e.consume();
}
}
@Override
public void keyReleased(KeyEvent e) {
leeresFeld.setText(" ");
}
});
Feld2.setBounds(1022, 354, 143, 35);
frame.getContentPane().add(Feld2);
Feld2.setColumns(10);
JTextField Feld3 = new JTextField();
Feld3.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
char c = e.getKeyChar();
if (!(Character.isDigit(c) || (c == KeyEvent.VK_BACK_SPACE) || (c == KeyEvent.VK_DELETE))) {
e.consume();
}
}
@Override
public void keyReleased(KeyEvent e) {
leeresFeld.setText(" ");
}
});
Feld3.setBounds(1022, 475, 143, 35);
frame.getContentPane().add(Feld3);
Feld3.setColumns(10);
JButton btnPrfeDieAngaben = new JButton("Test");
btnPrfeDieAngaben.setBorder(UIManager.getBorder("Button.border"));
btnPrfeDieAngaben.setFont(new Font("Tahoma", Font.PLAIN, 14));
btnPrfeDieAngaben.setBackground(Color.WHITE);
btnPrfeDieAngaben.setBounds(1022, 590, 143, 36);
frame.getContentPane().add(btnPrfeDieAngaben);
btnPrfeDieAngaben.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int answer1 = Integer.parseInt(Feld1.getText());
int answer2 = Integer.parseInt(Feld2.getText());
int answer3 = Integer.parseInt(Feld3.getText());
if (Feld1.getText().trim().isEmpty() && Feld2.getText().trim().isEmpty()
&& Feld3.getText().trim().isEmpty()) {
leeresFeld.setText("empty");
}
else if (Feld1.getText().trim().isEmpty()) {
leeresFeld.setText("empty");
} else if (Feld2.getText().trim().isEmpty()) {
leeresFeld.setText("empty");
} else if (Feld3.getText().trim().isEmpty()) {
leeresFeld.setText("empty");
}
else if ((answer1 >= 1 && answer1 <= 150) && (answer2 >= 1 && answer2 <= 150)
&& (answer3 >= 1 && answer3 <= 150)) {
leeresFeld.setText("You entered: " + Feld1.getText() + " , " + Feld2.getText() + " , "
+ Feld3.getText() + " , " + " in mm");
}
else {
ImageIcon iconic = new ImageIcon(Machine_LearningApp.class.getResource("x-taste.png"));
JOptionPane.showMessageDialog(null, "Enter only numbers between 1 und 150 mm!", "Warning",
JOptionPane.INFORMATION_MESSAGE, iconic);
}
}
});
JButton btnNewButton = new JButton("Go");
btnNewButton.setHideActionText(true);
btnNewButton.setFont(new Font("Lucida Grande", Font.BOLD | Font.ITALIC, 15));
btnNewButton.setBackground(new Color(255, 255, 255));
btnNewButton.setBorder(UIManager.getBorder("Button.border"));
btnNewButton.setBounds(1042, 689, 112, 36);
frame.getContentPane().add(btnNewButton);
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Hier mit der Schnittstelle verbinden
}
});
JButton btnNewButton_1 = new JButton("Reset");
btnNewButton_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Feld1.setText("");
Feld2.setText("");
Feld3.setText("");
leeresFeld.setText("");
}
});
btnNewButton_1.setBorder(UIManager.getBorder("Button.border"));
btnNewButton_1.setHorizontalTextPosition(SwingConstants.CENTER);
btnNewButton_1.setFont(new Font("Tahoma", Font.PLAIN, 15));
btnNewButton_1.setBackground(new Color(255, 255, 255));
btnNewButton_1.setBounds(1208, 592, 96, 33);
frame.getContentPane().add(btnNewButton_1);
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(392, 541, -313, 31);
frame.getContentPane().add(scrollPane);
JLabel label_1 = new JLabel("");
label_1.setOpaque(true);
label_1.setBackground(new Color(0, 51, 102));
label_1.setBounds(700, 97, 740, 781);
frame.getContentPane().add(label_1);
JLabel lblNewLabel_3 = new JLabel("");
Image img1 = new ImageIcon(this.getClass().getResource("/LPS.png")).getImage();
lblNewLabel_3.setIcon(new ImageIcon(img1));
lblNewLabel_3.setBounds(104, 246, 447, 353);
frame.getContentPane().add(lblNewLabel_3);
}
}
不是真的和答案。更多对您发布的代码的批评。
frame.getContentPane().setLayout(null);
这不是个好主意。您应该使用布局管理器。
lblNewLabel.setBounds(0, 0, 1440, 85);
如果您使用布局管理器,则无需计算 GUI 组件的大小和位置,例如 JLabel
。
Feld1.addKeyListener(new KeyAdapter() {
有几种更好的方法可以确保用户只能在 JTextField
中输入数字而不是按键监听器。一个聪明而狡猾的用户会简单地将文本粘贴到 JTextField
而不是键入它。
int answer1 = Integer.parseInt(Feld1.getText());
如果 Feld1
不包含数字(如果它为空则包括在内),方法 parseInt()
将抛出异常 - 这是您所说的实际问题,因为你发布了你的问题。在调用方法 parseInt()
或捕获异常之前,您应该检查 JTextField
是否为空。
我坚信要彻底、全面地学习Swing。
我推荐教程 Creating a GUI With JFC/Swing。它几乎涵盖了 Swing.
的所有方面
除了包含 Swing 章节的一般 java 编程书籍外,还有几本专门介绍它的书籍。这是我读过的列表(排名不分先后)。请注意,它们可能很旧,但它们仍然非常相关。
- Java Swing 权威指南,作者:John Zukowski
- Java 基金会 类 大卫·弗拉纳根
- Kim Topley 编写的核心 JFC 第二版
- Java Marc Loy(和其他人)的 Swing 第 2 版
- Matthew Robinson 和 Pavel Vorobiev 的 Swing 第 2 版
我个人最喜欢的是 Core JFC 2nd Edition,但每个人都有自己的最爱。我以前的一位同事最喜欢的是 Java Swing 2nd Edition
how to set a range of number (between 1-150) for a JTextfield in Java Swing
使用 JSpinner
。它将:
- 自动只允许输入数字
- 整数值必须在定义的范围内。
阅读有关 How to Use Spinners 的 Swing 教程部分,了解更多信息和示例。
我正在编写一个 GUI 应用程序来输入工件的高度宽度和长度。当用户单击 "Test" 按钮时,如果字段为空并且输入大于 150,则应警告(通过 jlabel)。我正在努力解决一个问题 here.The 问题是它可以工作,但是当我 运行 根据数字格式编写程序时会出现很多警告。此外,当我单击 "Test" 按钮并且 JTextfield 为空时,它不会显示任何警告,但它只是忽略了这部分代码。我该如何解决这些问题?有没有更好的方法?
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.JScrollPane;
import javax.swing.UIManager;
import javax.swing.JOptionPane;
public class Machine_LearningApp {
private JFrame frame;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Machine_LearningApp window = new Machine_LearningApp();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public Machine_LearningApp() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(200, 200, 1182, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
frame.setTitle("Machine Learning Applikation");
frame.getContentPane().setLayout(null);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
frame.setSize(screenSize);
frame.setVisible(true);
JLabel lblNewLabel = new JLabel("Workpiece recognition ");
lblNewLabel.setAutoscrolls(true);
lblNewLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
lblNewLabel.setHorizontalTextPosition(SwingConstants.CENTER);
lblNewLabel.setOpaque(true);
lblNewLabel.setForeground(new Color(255, 255, 255));
lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
lblNewLabel.setFont(new Font("Tahoma", Font.BOLD, 37));
lblNewLabel.setBackground(new Color(0, 51, 102));
lblNewLabel.setBounds(0, 0, 1440, 85);
frame.getContentPane().add(lblNewLabel);
JLabel lblHheDesBauteiles = new JLabel("Height");
lblHheDesBauteiles.setForeground(new Color(255, 255, 255));
lblHheDesBauteiles.setFont(new Font("Tahoma", Font.PLAIN, 15));
lblHheDesBauteiles.setBounds(769, 246, 158, 36);
frame.getContentPane().add(lblHheDesBauteiles);
JLabel lblNewLabel_1 = new JLabel("Width");
lblNewLabel_1.setForeground(new Color(255, 255, 255));
lblNewLabel_1.setFont(new Font("Tahoma", Font.PLAIN, 15));
lblNewLabel_1.setBounds(769, 352, 158, 36);
frame.getContentPane().add(lblNewLabel_1);
JLabel lblLngeDesBauteiles = new JLabel("Length");
lblLngeDesBauteiles.setForeground(new Color(255, 255, 255));
lblLngeDesBauteiles.setFont(new Font("Tahoma", Font.PLAIN, 15));
lblLngeDesBauteiles.setBounds(769, 474, 158, 36);
frame.getContentPane().add(lblLngeDesBauteiles);
JLabel lblBitteDieAngaben = new JLabel("Please enter here:");
lblBitteDieAngaben.setForeground(new Color(255, 255, 255));
lblBitteDieAngaben.setFont(new Font("Shree Devanagari 714", Font.ITALIC, 18));
lblBitteDieAngaben.setBounds(896, 131, 395, 37);
frame.getContentPane().add(lblBitteDieAngaben);
JLabel lblNewLabel_2 = new JLabel("mm");
lblNewLabel_2.setHorizontalAlignment(SwingConstants.CENTER);
lblNewLabel_2.setHorizontalTextPosition(SwingConstants.CENTER);
lblNewLabel_2.setOpaque(true);
lblNewLabel_2.setBounds(1232, 249, 42, 33);
frame.getContentPane().add(lblNewLabel_2);
JLabel lblNewLabel_2_1 = new JLabel("mm");
lblNewLabel_2_1.setOpaque(true);
lblNewLabel_2_1.setHorizontalTextPosition(SwingConstants.CENTER);
lblNewLabel_2_1.setHorizontalAlignment(SwingConstants.CENTER);
lblNewLabel_2_1.setBounds(1232, 355, 42, 33);
frame.getContentPane().add(lblNewLabel_2_1);
JLabel lblNewLabel_2_2 = new JLabel("mm");
lblNewLabel_2_2.setOpaque(true);
lblNewLabel_2_2.setHorizontalTextPosition(SwingConstants.CENTER);
lblNewLabel_2_2.setHorizontalAlignment(SwingConstants.CENTER);
lblNewLabel_2_2.setBounds(1232, 477, 42, 33);
frame.getContentPane().add(lblNewLabel_2_2);
JLabel leeresFeld = new JLabel("");
leeresFeld.setFont(new Font("Lucida Grande", Font.BOLD | Font.ITALIC, 13));
leeresFeld.setHorizontalAlignment(SwingConstants.CENTER);
leeresFeld.setForeground(new Color(220, 20, 60));
leeresFeld.setBounds(954, 523, 320, 36);
frame.getContentPane().add(leeresFeld);
JTextField Feld1 = new JTextField();
Feld1.setSelectionColor(Color.GRAY);
Feld1.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
char c = e.getKeyChar();
if (!(Character.isDigit(c) || (c == KeyEvent.VK_BACK_SPACE) || (c == KeyEvent.VK_DELETE))) {
e.consume();
}
}
@Override
public void keyReleased(KeyEvent e) {
leeresFeld.setText(" ");
}
});
Feld1.setBounds(1022, 247, 143, 35);
frame.getContentPane().add(Feld1);
Feld1.setColumns(10);
JTextField Feld2 = new JTextField();
Feld2.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
char c = e.getKeyChar();
if (!(Character.isDigit(c) || (c == KeyEvent.VK_BACK_SPACE) || (c == KeyEvent.VK_DELETE))) {
e.consume();
}
}
@Override
public void keyReleased(KeyEvent e) {
leeresFeld.setText(" ");
}
});
Feld2.setBounds(1022, 354, 143, 35);
frame.getContentPane().add(Feld2);
Feld2.setColumns(10);
JTextField Feld3 = new JTextField();
Feld3.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
char c = e.getKeyChar();
if (!(Character.isDigit(c) || (c == KeyEvent.VK_BACK_SPACE) || (c == KeyEvent.VK_DELETE))) {
e.consume();
}
}
@Override
public void keyReleased(KeyEvent e) {
leeresFeld.setText(" ");
}
});
Feld3.setBounds(1022, 475, 143, 35);
frame.getContentPane().add(Feld3);
Feld3.setColumns(10);
JButton btnPrfeDieAngaben = new JButton("Test");
btnPrfeDieAngaben.setBorder(UIManager.getBorder("Button.border"));
btnPrfeDieAngaben.setFont(new Font("Tahoma", Font.PLAIN, 14));
btnPrfeDieAngaben.setBackground(Color.WHITE);
btnPrfeDieAngaben.setBounds(1022, 590, 143, 36);
frame.getContentPane().add(btnPrfeDieAngaben);
btnPrfeDieAngaben.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int answer1 = Integer.parseInt(Feld1.getText());
int answer2 = Integer.parseInt(Feld2.getText());
int answer3 = Integer.parseInt(Feld3.getText());
if (Feld1.getText().trim().isEmpty() && Feld2.getText().trim().isEmpty()
&& Feld3.getText().trim().isEmpty()) {
leeresFeld.setText("empty");
}
else if (Feld1.getText().trim().isEmpty()) {
leeresFeld.setText("empty");
} else if (Feld2.getText().trim().isEmpty()) {
leeresFeld.setText("empty");
} else if (Feld3.getText().trim().isEmpty()) {
leeresFeld.setText("empty");
}
else if ((answer1 >= 1 && answer1 <= 150) && (answer2 >= 1 && answer2 <= 150)
&& (answer3 >= 1 && answer3 <= 150)) {
leeresFeld.setText("You entered: " + Feld1.getText() + " , " + Feld2.getText() + " , "
+ Feld3.getText() + " , " + " in mm");
}
else {
ImageIcon iconic = new ImageIcon(Machine_LearningApp.class.getResource("x-taste.png"));
JOptionPane.showMessageDialog(null, "Enter only numbers between 1 und 150 mm!", "Warning",
JOptionPane.INFORMATION_MESSAGE, iconic);
}
}
});
JButton btnNewButton = new JButton("Go");
btnNewButton.setHideActionText(true);
btnNewButton.setFont(new Font("Lucida Grande", Font.BOLD | Font.ITALIC, 15));
btnNewButton.setBackground(new Color(255, 255, 255));
btnNewButton.setBorder(UIManager.getBorder("Button.border"));
btnNewButton.setBounds(1042, 689, 112, 36);
frame.getContentPane().add(btnNewButton);
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Hier mit der Schnittstelle verbinden
}
});
JButton btnNewButton_1 = new JButton("Reset");
btnNewButton_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Feld1.setText("");
Feld2.setText("");
Feld3.setText("");
leeresFeld.setText("");
}
});
btnNewButton_1.setBorder(UIManager.getBorder("Button.border"));
btnNewButton_1.setHorizontalTextPosition(SwingConstants.CENTER);
btnNewButton_1.setFont(new Font("Tahoma", Font.PLAIN, 15));
btnNewButton_1.setBackground(new Color(255, 255, 255));
btnNewButton_1.setBounds(1208, 592, 96, 33);
frame.getContentPane().add(btnNewButton_1);
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(392, 541, -313, 31);
frame.getContentPane().add(scrollPane);
JLabel label_1 = new JLabel("");
label_1.setOpaque(true);
label_1.setBackground(new Color(0, 51, 102));
label_1.setBounds(700, 97, 740, 781);
frame.getContentPane().add(label_1);
JLabel lblNewLabel_3 = new JLabel("");
Image img1 = new ImageIcon(this.getClass().getResource("/LPS.png")).getImage();
lblNewLabel_3.setIcon(new ImageIcon(img1));
lblNewLabel_3.setBounds(104, 246, 447, 353);
frame.getContentPane().add(lblNewLabel_3);
}
}
不是真的和答案。更多对您发布的代码的批评。
frame.getContentPane().setLayout(null);
这不是个好主意。您应该使用布局管理器。
lblNewLabel.setBounds(0, 0, 1440, 85);
如果您使用布局管理器,则无需计算 GUI 组件的大小和位置,例如 JLabel
。
Feld1.addKeyListener(new KeyAdapter() {
有几种更好的方法可以确保用户只能在 JTextField
中输入数字而不是按键监听器。一个聪明而狡猾的用户会简单地将文本粘贴到 JTextField
而不是键入它。
int answer1 = Integer.parseInt(Feld1.getText());
如果 Feld1
不包含数字(如果它为空则包括在内),方法 parseInt()
将抛出异常 - 这是您所说的实际问题,因为你发布了你的问题。在调用方法 parseInt()
或捕获异常之前,您应该检查 JTextField
是否为空。
我坚信要彻底、全面地学习Swing。
我推荐教程 Creating a GUI With JFC/Swing。它几乎涵盖了 Swing.
除了包含 Swing 章节的一般 java 编程书籍外,还有几本专门介绍它的书籍。这是我读过的列表(排名不分先后)。请注意,它们可能很旧,但它们仍然非常相关。
- Java Swing 权威指南,作者:John Zukowski
- Java 基金会 类 大卫·弗拉纳根
- Kim Topley 编写的核心 JFC 第二版
- Java Marc Loy(和其他人)的 Swing 第 2 版
- Matthew Robinson 和 Pavel Vorobiev 的 Swing 第 2 版
我个人最喜欢的是 Core JFC 2nd Edition,但每个人都有自己的最爱。我以前的一位同事最喜欢的是 Java Swing 2nd Edition
how to set a range of number (between 1-150) for a JTextfield in Java Swing
使用 JSpinner
。它将:
- 自动只允许输入数字
- 整数值必须在定义的范围内。
阅读有关 How to Use Spinners 的 Swing 教程部分,了解更多信息和示例。