我正在编写一个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);
}
}
并不是真的,要回答。对您发布的代码有更多的批评。
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编程书籍之外,还有几本完全专门针对它的书籍。这是我已阅读的列表(不分先后)。请注意,它们可能很旧,但是仍然非常相关。
Core JFC 2nd Edition