f_ozk
f_ozk

Reputation: 5

how to set a range of number (between 1-150) for a JTextfield in Java Swing

I am programming a GUI Application to enter the height width and length of a workpiece. When the user clicks on the "Test" Button it should be warned (through a jlabel) if the fields are empty and if the input is bigger than 150. I am struggling with a problem here.The problem is that it works but there are a lot of warnings when I run the program according to the Numberformat. Also when I click the "Test" Button and the JTextfield are empty it does not show any warning but it just ignores this part of the code. How can I fix these problems? Is there a better way?

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);

}

}

Upvotes: 0

Views: 773

Answers (2)

camickr
camickr

Reputation: 324118

how to set a range of number (between 1-150) for a JTextfield in Java Swing

Use a JSpinner. It will:

  1. automatically only allow numbers to be entered
  2. the integer value must be in the defined range.

Read the section from the Swing tutorial on How to Use Spinners for more information and examples.

Upvotes: 1

Abra
Abra

Reputation: 20914

Not really and answer. More a critique of the code you posted.

frame.getContentPane().setLayout(null);

Not a good idea. You should use layout managers.

lblNewLabel.setBounds(0, 0, 1440, 85);

If you use a layout manager, you don't need to calculate size and location of the GUI components, like JLabel.

Feld1.addKeyListener(new KeyAdapter() {

There are several, better ways to make sure the user can only enter numbers into a JTextField than a key listener. A clever and devious user will simply paste text into the JTextField rather than typing into it.

int answer1 = Integer.parseInt(Feld1.getText());

If Feld1 does not contain a number (and that includes if it is empty), method parseInt() will throw an exception - which is the actual problem you say you are experiencing and because of it you posted your question. You should check whether the JTextField is empty before you call method parseInt() or alternatively catch the exception.

I firmly believe in thoroughly and comprehensively learning Swing.
I recommend the tutorial Creating a GUI With JFC/Swing. It covers almost all aspects of Swing.

Apart from general java programming books that contain chapters on Swing, there are also several books devoted entirely to it. Here is a list of the ones I have read (in no particular order). Note that they may be old, nonetheless they are still very relevant.

  • Definitive Guide to Java Swing by John Zukowski
  • Java Foundation Classes in a Nutshell by David Flanagan
  • Core JFC 2nd Edition by Kim Topley
  • Java Swing 2nd Edition by Marc Loy (and others)
  • Swing 2nd Edition by Matthew Robinson and Pavel Vorobiev

My personal favorite is Core JFC 2nd Edition but each person has his favorite. The favorite of one of my previous work colleagues was Java Swing 2nd Edition

Upvotes: 1

Related Questions