如何在Java Swing中为JTextfield设置数字范围(1-150之间)

问题描述 投票:0回答:1

我正在编写一个GUI应用程序,以输入工件的高度,宽度和长度。当用户单击“测试”按钮时,应该警告(通过jlabel)字段是否为空以及输入是否大于150。我在这里遇到问题。问题是它可以工作,但是有根据Numberformat运行程序时会出现很多警告。同样,当我单击“测试”按钮并且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);

}

}
java swing user-interface jtextfield number-formatting
1个回答
0
投票

并不是真的,要回答。对您发布的代码有更多的批评。

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()将引发异常-这是您说的实际问题,因此您发布了问题。您应该在调用方法JTextField之前检查parseInt()是否为空,或者捕获异常。

我坚信全面而全面地学习Swing。我推荐教程Creating a GUI With JFC/Swing。它涵盖了Swing

的几乎所有方面。

除了包含有关[[Swing的章节的通用Java编程书籍之外,还有几本完全专门针对它的书籍。这是我已阅读的列表(不分先后)。请注意,它们可能很旧,但是仍然非常相关。

    John Zukowski的Java Swing权威指南
  • David Flanagan总结的Java基础类
  • Kim Topley撰写的JFC核心第二版
  • Marc Loy和其他人的Java Swing第二版
  • 《摇摆第二版》,马修·罗宾逊和帕维尔·沃罗比耶夫]
  • 我个人的最爱是

    Core JFC 2nd Edition

,但是每个人都有他的最爱。我以前的一位同事的最爱是Java Swing第二版
© www.soinside.com 2019 - 2024. All rights reserved.