поэтому я сделал этот Java GUI, который в основном решает вопросы SUVAT (для тех из вас, кто не знаком с SUVAT, он в основном говорит вам приблизительное значение того, насколько автомобиль будет ускорен с учетом его скорости/времени или найти, как высоко мяч будет идти с заданной скоростью и т. д. Вы используете его mehcanics). Я знаю, что в моей программе есть недостатки, такие как генерация целочисленных переменных (просто чтобы сохранить порядок вещей), поэтому ответ может быть округлен. Макет не очень хорош, но я только недавно начал программировать. GUI загружается отлично, но когда пользователь нажимает кнопку расчета, то есть, когда он падает. Я подозреваю, что это что-то связано с прослушивателем действия на кнопке, поскольку я думаю, что сделал это немного сложнее, чем предполагалось.Ошибка с прослушивающими действиями
Пользователь в основном выбирает то, что он хочет решить (например, если бы я хотел найти ускорение автомобиля, тогда я бы проверил переключатель ускорения и набрал данные, которые я знаю (т.е. начальная скорость равна 15, конечная скорость равна 30, время равно 2, поэтому ускорение должно составлять 7,5 (8 в этом случае, поскольку использовались ints). Программа выбирает наиболее подходящее уравнение для поиска переменной, которую вы хотите знать.
Это код:
import javax.swing.JFrame;
public class GUImain {
public static void main(String[] args) {
GUI go = new GUI();
go.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
go.setSize(400,400);
go.setVisible(true);
}
}
import java.awt.FlowLayout;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
public class GUI extends JFrame implements ActionListener {
JTextField DISPLACEMENT = new JTextField("Displacement", 20);
JTextField INITALVELOCITY = new JTextField("Intital Velocity", 20);
JTextField FINALVELOCITY = new JTextField("Final Velocity", 20);
JTextField ACCELERATION = new JTextField("Acceleration", 20);
JTextField TIME = new JTextField("Time");
JRadioButton S = new JRadioButton("Displacement", true);
JRadioButton U = new JRadioButton("Inital Velocity", false);
JRadioButton V = new JRadioButton("Final Velocity", false);
JRadioButton A = new JRadioButton("Acceleration", false);
JRadioButton T = new JRadioButton("Time", false);
ButtonGroup VARIABLEFINDER;
JButton CALCULATE = new JButton("Calculate");
GUI() {
super("SUVAT Solver");
setLayout(new FlowLayout());
add(DISPLACEMENT);
add(INITALVELOCITY);
add(FINALVELOCITY);
add(ACCELERATION);
add(TIME);
add(CALCULATE);
add(S);
add(U);
add(V);
add(A);
add(T);
VARIABLEFINDER = new ButtonGroup();
VARIABLEFINDER.add(S);
VARIABLEFINDER.add(U);
VARIABLEFINDER.add(V);
VARIABLEFINDER.add(A);
VARIABLEFINDER.add(T);
// Adding Listeners to the RadioButtons
CALCULATE.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
String dis = DISPLACEMENT.getText();
int SS = Integer.parseInt(dis);
String initv = INITALVELOCITY.getText();
int UU = Integer.parseInt(initv);
String finalv = FINALVELOCITY.getText();
int VV = Integer.parseInt(finalv);
String acc = ACCELERATION.getText();
int AA = Integer.parseInt(acc);
String timme = TIME.getText();
int TT = Integer.parseInt(timme);
// CALCULATING DISPLACEMENT
if (e.getSource() == CALCULATE && S.isSelected()) {
if (FINALVELOCITY.getText().equals("Final Velocity")) {
SS = (int) ((int) (UU * TT) + (0.5 * AA * (TT * TT)));
JOptionPane.showMessageDialog(null,
"The displacement claulcated is " + SS);
} else if (ACCELERATION.getText().equals("Acceleration")) {
SS = (int) 0.5 * (UU + VV) * TT;
JOptionPane.showMessageDialog(null,
"The displacement claulcated is " + SS);
} else if (INITALVELOCITY.getText().equals("Inital Velocity")) {
SS = (int) ((VV * TT) - (0.5 * AA * (TT * TT)));
JOptionPane.showMessageDialog(null,
"The displacement claulcated is " + SS);
} else if (TIME.getText().equals("Time")) {
SS = (((VV * VV) - (UU * UU))/(2 * AA));
JOptionPane.showMessageDialog(null,
"The displacement claulcated is " + SS);
}
}
// CALCULATING THE INITAL VELOCITY
if (e.getSource() == CALCULATE && U.isSelected()) {
if (FINALVELOCITY.getText().equals("Final Velocity")) {
UU = (int) ((SS - (0.5 * AA * (TT * TT)))/(TT));
JOptionPane.showMessageDialog(null,
"The intial velocity claulcated is " + UU);
} else if (ACCELERATION.getText().equals("Acceleration")) {
UU = ((2 * SS)/TT) - VV;
JOptionPane.showMessageDialog(null,
"The intial velocity claulcated is " + UU);
} else if (TIME.getText().equals("Time")) {
UU = (int) Math.sqrt(((VV * VV) - (2 * AA * SS)));
JOptionPane.showMessageDialog(null,
"The intial velocity claulcated is " + UU);
} else if (DISPLACEMENT.getText().equals("Displacement")) {
UU = (AA * TT) - VV;
JOptionPane.showMessageDialog(null,
"The intial velocity claulcated is " + UU);
}
}
// CALCULATING THE FINAL VELOCITY
if (e.getSource() == CALCULATE && V.isSelected()) {
if (INITALVELOCITY.getText().equals("Inital Velocity")) {
VV = (int) ((SS + (0.5 * AA * (TT * TT)))/TT);
JOptionPane.showMessageDialog(null,
"The final velocity claulcated is " + VV);
} else if (TIME.getText().equals("Time")) {
VV = (int) Math.sqrt(((UU * UU) + (2 * AA * SS)));
JOptionPane.showMessageDialog(null,
"The final velocity claulcated is " + VV);
} else if (DISPLACEMENT.getText().equals("Displacement")) {
VV = (AA * TT) + UU;
JOptionPane.showMessageDialog(null,
"The final velocity claulcated is " + VV);
} else if (ACCELERATION.getText().equals("Acceleration")) {
VV = ((2 * SS)/TT) - UU;
JOptionPane.showMessageDialog(null,
"The final velocity claulcated is " + VV);
}
}
// CALCULATING THE ACCELERATION
if (e.getSource() == CALCULATE && A.isSelected()) {
if (INITALVELOCITY.getText().equals("Inital Velocity")) {
AA = (int) ((SS - (VV * TT))/(-0.5 * (TT * TT)));
JOptionPane.showMessageDialog(null,
"The acceleration claulcated is " + AA);
} else if (TIME.getText().equals("Time")) {
AA = (((VV * VV) - (UU * UU))/(2 * SS));
JOptionPane.showMessageDialog(null,
"The acceleration claulcated is " + AA);
} else if (DISPLACEMENT.getText().equals("Displacement")) {
AA = (VV - UU)/TT;
JOptionPane.showMessageDialog(null,
"The acceleration claulcated is " + AA);
} else if (FINALVELOCITY.getText().equals("Final Velocity")) {
VV = (int) ((SS - (UU * TT))/(0.5 * (TT * TT)));
JOptionPane.showMessageDialog(null,
"The acceleration claulcated is " + AA);
}
}
// CALCULATING THE TIME
if (CALCULATE.getAction() && A.isSelected()) {
if (INITALVELOCITY.getText().equals("Inital Velocity")) {
AA = (int) ((SS - (VV * TT))/(-0.5 * (TT * TT)));
JOptionPane.showMessageDialog(null,
"havent done the time calculations yet");
} else if (TIME.getText().equals("Time")) {
AA = (((VV * VV) - (UU * UU))/(2 * SS));
JOptionPane.showMessageDialog(null,
"havent done the time calculations yet");
} else if (DISPLACEMENT.getText().equals("Displacement")) {
AA = (VV - UU)/TT;
JOptionPane.showMessageDialog(null,
"havent done the time calculations yet");
} else if (FINALVELOCITY.getText().equals("Final Velocity")) {
VV = (int) ((SS - (UU * TT))/(0.5 * (TT * TT)));
JOptionPane.showMessageDialog(null,
"havent done the time calculations yet");
}
}
}
}
Я думаю, что ошибка наступает, когда говорят, что кто-то хочет найти ускорение, используя уравнение который не содержит смещения в нем ((VU)/T), компилятор по-прежнему переопределяет текст по умолчанию в текстовом поле как строку и преобразует строку в int с момента нажатия кнопки расчета, все в текстовом поле преобразуется в int и мои аргументы в прослушивателях действия весьма специфичны.
Это ошибка:
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "Displacement"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at GUI.actionPerformed(GUI.java:66)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
EDIT = Спасибо Борис паук, ты заставил меня понять, что я пытаюсь преобразовать строку в междунар где эта строка не содержит каких-либо цифр. Дурак я. Это довольно смущает. В этом была проблема
В любом случае программа работает нормально, дает округленные ответы, как она должна была делать. Но я уверен, что я немного перетащил код для приложения. Это рабочая часть действия части слушатель рабочего кода:
public void actionPerformed(ActionEvent e) {
// CALCULATING DISPLACEMENT
if (e.getSource() == CALCULATE && S.isSelected()) {
if (FINALVELOCITY.getText().equals("")) {
String initv = INITALVELOCITY.getText();
int UU = Integer.parseInt(initv);
String timme = TIME.getText();
int TT = Integer.parseInt(timme);
String acc = ACCELERATION.getText();
int AA = Integer.parseInt(acc);
int SS = (int) ((int) (UU * TT) + (0.5 * AA * (TT * TT)));
JOptionPane.showMessageDialog(null,
"The displacement claulcated is " + SS);
} else if (ACCELERATION.getText().equals("")) {
String timme = TIME.getText();
int TT = Integer.parseInt(timme);
String finalv = FINALVELOCITY.getText();
int VV = Integer.parseInt(finalv);
String initv = INITALVELOCITY.getText();
int UU = Integer.parseInt(initv);
int SS = (int) 0.5 * (UU + VV) * TT;
JOptionPane.showMessageDialog(null,
"The displacement claulcated is " + SS);
} else if (INITALVELOCITY.getText().equals("")) {
String timme = TIME.getText();
int TT = Integer.parseInt(timme);
String acc = ACCELERATION.getText();
int AA = Integer.parseInt(acc);
String finalv = FINALVELOCITY.getText();
int VV = Integer.parseInt(finalv);
int SS = (int) ((VV * TT) - (0.5 * AA * (TT * TT)));
JOptionPane.showMessageDialog(null,
"The displacement claulcated is " + SS);
} else if (TIME.getText().equals("")) {
String finalv = FINALVELOCITY.getText();
int VV = Integer.parseInt(finalv);
String initv = INITALVELOCITY.getText();
int UU = Integer.parseInt(initv);
String acc = ACCELERATION.getText();
int AA = Integer.parseInt(acc);
int SS = (((VV * VV) - (UU * UU))/(2 * AA));
JOptionPane.showMessageDialog(null,
"The displacement claulcated is " + SS);
}
}
// CALCULATING THE INITAL VELOCITY
if (e.getSource() == CALCULATE && U.isSelected()) {
if (FINALVELOCITY.getText().equals("")) {
String dis = DISPLACEMENT.getText();
int SS = Integer.parseInt(dis);
String acc = ACCELERATION.getText();
int AA = Integer.parseInt(acc);
String timme = TIME.getText();
int TT = Integer.parseInt(timme);
int UU = (int) ((SS - (0.5 * AA * (TT * TT)))/(TT));
JOptionPane.showMessageDialog(null,
"The intial velocity claulcated is " + UU);
} else if (ACCELERATION.getText().equals("")) {
String timme = TIME.getText();
int TT = Integer.parseInt(timme);
String dis = DISPLACEMENT.getText();
int SS = Integer.parseInt(dis);
String finalv = FINALVELOCITY.getText();
int VV = Integer.parseInt(finalv);
int UU = ((2 * SS)/TT) - VV;
JOptionPane.showMessageDialog(null,
"The intial velocity claulcated is " + UU);
}
else if (TIME.getText().equals("")) {
String finalv = FINALVELOCITY.getText();
int VV = Integer.parseInt(finalv);
String acc = ACCELERATION.getText();
int AA = Integer.parseInt(acc);
String dis = DISPLACEMENT.getText();
int SS = Integer.parseInt(dis);
int UU = (int) Math.sqrt(((VV * VV) - (2 * AA * SS)));
JOptionPane.showMessageDialog(null,
"The intial velocity claulcated is " + UU);
} else if (DISPLACEMENT.getText().equals("")) {
String acc = ACCELERATION.getText();
int AA = Integer.parseInt(acc);
String finalv = FINALVELOCITY.getText();
int VV = Integer.parseInt(finalv);
String timme = TIME.getText();
int TT = Integer.parseInt(timme);
int UU = (AA * TT) - VV;
JOptionPane.showMessageDialog(null,
"The intial velocity claulcated is " + UU);
}
}
// CALCULATING THE FINAL VELOCITY
if (e.getSource() == CALCULATE && V.isSelected()) {
if (INITALVELOCITY.getText().equals("")) {
String dis = DISPLACEMENT.getText();
int SS = Integer.parseInt(dis);
String acc = ACCELERATION.getText();
int AA = Integer.parseInt(acc);
String timme = TIME.getText();
int TT = Integer.parseInt(timme);
int VV = (int) ((SS + (0.5 * AA * (TT * TT)))/TT);
JOptionPane.showMessageDialog(null,
"The final velocity claulcated is " + VV);
} else if (TIME.getText().equals("")) {
String acc = ACCELERATION.getText();
int AA = Integer.parseInt(acc);String dis = DISPLACEMENT.getText();
int SS = Integer.parseInt(dis);
String initv = INITALVELOCITY.getText();
int UU = Integer.parseInt(initv);
int VV = (int) Math.sqrt(((UU * UU) + (2 * AA * SS)));
JOptionPane.showMessageDialog(null,
"The final velocity claulcated is " + VV);
} else if (DISPLACEMENT.getText().equals("")) {
String initv = INITALVELOCITY.getText();
int UU = Integer.parseInt(initv);
String timme = TIME.getText();
int TT = Integer.parseInt(timme);
String acc = ACCELERATION.getText();
int AA = Integer.parseInt(acc);
int VV = (AA * TT) + UU;
JOptionPane.showMessageDialog(null,
"The final velocity claulcated is " + VV);
} else if (ACCELERATION.getText().equals("")) {
String timme = TIME.getText();
int TT = Integer.parseInt(timme);
String dis = DISPLACEMENT.getText();
int SS = Integer.parseInt(dis);
String initv = INITALVELOCITY.getText();
int UU = Integer.parseInt(initv);
int VV = ((2 * SS)/TT) - UU;
JOptionPane.showMessageDialog(null,
"The final velocity claulcated is " + VV);
}
}
// CALCULATING THE ACCELERATION
if (e.getSource() == CALCULATE && A.isSelected()) {
if (INITALVELOCITY.getText().equals("")) {
String dis = DISPLACEMENT.getText();
int SS = Integer.parseInt(dis);
String finalv = FINALVELOCITY.getText();
int VV = Integer.parseInt(finalv);
String timme = TIME.getText();
int TT = Integer.parseInt(timme);
int AA = (int) ((SS - (VV * TT))/(-0.5 * (TT * TT)));
JOptionPane.showMessageDialog(null,
"The acceleration claulcated is " + AA);
} else if (TIME.getText().equals("")) {
String dis = DISPLACEMENT.getText();
int SS = Integer.parseInt(dis);
String initv = INITALVELOCITY.getText();
int UU = Integer.parseInt(initv);
String finalv = FINALVELOCITY.getText();
int VV = Integer.parseInt(finalv);
int AA = (((VV * VV) - (UU * UU))/(2 * SS));
JOptionPane.showMessageDialog(null,
"The acceleration claulcated is " + AA);
} else if (DISPLACEMENT.getText().equals("")) {
String finalv = FINALVELOCITY.getText();
int VV = Integer.parseInt(finalv);
String initv = INITALVELOCITY.getText();
int UU = Integer.parseInt(initv);
String timme = TIME.getText();
int TT = Integer.parseInt(timme);
int AA = (VV - UU)/TT;
JOptionPane.showMessageDialog(null,
"The acceleration claulcated is " + AA);
} else if (FINALVELOCITY.getText().equals("")) {
String initv = INITALVELOCITY.getText();
int UU = Integer.parseInt(initv);
String dis = DISPLACEMENT.getText();
int SS = Integer.parseInt(dis);
String timme = TIME.getText();
int TT = Integer.parseInt(timme);
int AA = (int) ((SS - (UU * TT))/(0.5 * (TT * TT)));
JOptionPane.showMessageDialog(null,
"The acceleration claulcated is " + AA);
}
}
Im уверен, что я мог бы сделал методу Thats преобразует строку в целые числа в качестве объекта другого класса так, когда я хочу, чтобы преобразовать строка из текстового поля смещения в int, я мог бы просто вызвать этот объект?
Аварии - это самое смутное описание, которое вы могли бы дать. Если вы хотите получить помощь, разместите трассировку ошибки. Далее следуйте [Соглашениям по именованию Java] (http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-135099.html#367) - без этого код невозможно прочитать. Классы должны быть в 'PascalCase' (а не кешках), а переменные должны быть в' LowerCamelCase' (а не кепках). –
, вероятно, из-за вашего вызова getAction() в последнем случае if – user2277872
Ошибка не получает четкости - _java.lang.NumberFormatException: для строки ввода: «Смещение» _. Вы пытаетесь разобрать «String» «Displacement» на «Integer» - это, очевидно, не работает. Подумайте об использовании ['JFormattedTextField'] (http://docs.oracle.com/javase/7/docs/api/javax/swing/JFormattedTextField.html) и [' JLabel'] (http://docs.oracle .com/javase/7/docs/api/javax/swing/JLabel.html) в ['GridBagLayout'] (http://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html) скорее чем размещение меток _inside_ полей ввода. –