Когда я запускаю программу, я получаю всплывающее окно, и когда я вписываю число в число 1 или номер 2, обработка исключений выдает мне ошибку «разрешены только цифры», прежде чем я нажимаю клавишу «ввод».Это продолжается, пока я не заполню число в обоих текстовых полях.Он не должен давать мне ошибок, если я не помещаю в текстовые поля кроме цифр.Также.Я не могу конвертировать из CM в INCH дважды, это снова выдаст ошибку.Я должен переключаться между преобразованием из CM в INCH и INCH в CM.Конвертируется нормально, поэтому проблема должна быть в настройке обработки исключений?Как будто он читает текстовое поле, прежде чем я нажимаю клавишу ввода, и поэтому выдает ошибку, потому что номер не вставлен.
Может кто-нибудь помочь мне?Заранее спасибо!
// Даниил
У меня 2 класса.
Код для класса 1:
package inchcm;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class InchCM extends JFrame {
private JTextField num1 = new JTextField(8);
private JTextField num2 = new JTextField(8);
private JLabel l1 = new JLabel();
private JLabel l2 = new JLabel();
public InchCM() {
setLayout(new BorderLayout());
//panel 1 med GridLayout (2,0) til 2 x JTextField(8).
JPanel p1 = new JPanel(new GridLayout(2, 0));
p1.add(new JLabel(""));
p1.add(num1);
p1.add(new JLabel(""));
p1.add(num2);
JPanel p2 = new JPanel(new GridLayout(2, 0));
p2.add(new JLabel(" Inches"));
p2.add(l1);
p2.add(new JLabel(" Centimeters"));
p2.add(l2);
add(p1, BorderLayout.EAST);
add(p2, BorderLayout.WEST);
num1.addKeyListener(
new KeyAdapter() {
public void keyReleased(KeyEvent e) {
try {
double nummer1 = Double.parseDouble(num1.getText());
double nummer2 = Double.parseDouble(num2.getText());
Udregning udr = new Udregning(nummer1, nummer2);
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
num2.setText(String.format("%.2f", udr.inchtocm()));
}
}
//end tal i et af JTextFieldsne.
catch (NumberFormatException ex) {
System.out.println(ex);
JOptionPane.showMessageDialog(null,
"Only numbers allowed \nTry again",
"Input error", JOptionPane.ERROR_MESSAGE);
}
}
});
num2.addKeyListener(
new KeyAdapter() {
public void keyReleased(KeyEvent e) {
try {
//objekt af num1 og num2.
double nummer1 = Double.parseDouble(num1.getText());
double nummer2 = Double.parseDouble(num2.getText());
Udregning udr = new Udregning(nummer1, nummer2);
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
num1.setText(String.format("%.2f", udr.cmtoinch()));
}
}
catch (NumberFormatException ex) {
System.out.println(ex);
JOptionPane.showMessageDialog(null,
"Only numbers allowed \nTry againn",
"Input error", JOptionPane.ERROR_MESSAGE);
}
}
});
}
public static void main(String[] args) {
InchCM frame = new InchCM();
frame.pack();
frame.setTitle("InchCM");
frame.setSize(300, 130);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
Код для класса 2: «Класс расчета»
package inchcm;
public class Udregning {
private double num1 = 0;
private double num2 = 0;
Udregning() {
}
Udregning(double newnum1, double newnum2) {
setnum1(newnum1);
setnum2(newnum2);
}
private void setnum1(double newnum1) {
num1 = newnum1;
}
private void setnum2(double newnum2) {
num2 = newnum2;
}
public double inchtocm() {
double result;
result = num1 * 2.54;
return result;
}
public double cmtoinch() {
double result;
result = num2 * .39;
return result;
}
}