Main.java
package com.eduardo.aio;
import com.eduardo.aio.design.Window;
public class Main {
public static void main(String args[]) {
new Window();
}
}
Window.java
public class Window extends JFrame {
private IMC imc = new IMC();
public JLabel jlabel1;
public JTextField peso;
public JLabel jlabel2;
public JTextField altura;
public JButton calcular;
public JLabel jlabel3;
public JTextField resultado;
public JButton reset;
public JLabel jlabel4;
public JTextField estado;
public JComboBox menu;
public Window() {
getContentPane().setLayout(null);
menu();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("All In One Functions Calculator v0.1");
setSize(400, 330);
setVisible(true);
setResizable(false);
setLocationRelativeTo(null);
}
public void menu(){
clearwindow();
String Menu[]={"","Indice de Massa Corporal"};
menu = new JComboBox(Menu);
menu.setLocation(100,115);
menu.setSize(200,30);
menu.setForeground( new Color(-16777216) );
menu.setBackground( new Color(-1) );
menu.setEditable(false );
menu.setToolTipText("");
getContentPane().add(menu);
menu.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int index = menu.getSelectedIndex();
switch(index){
case 0:
break;
case 1:
clearwindow();
imc();
break;
}
}
});
}
public void clearwindow() {
getContentPane().removeAll();
revalidate();
repaint();
}
public void imc() {
jlabel1 = new JLabel();
jlabel1.setLocation(8, 17);
jlabel1.setSize(40, 30);
jlabel1.setText("Peso:");
getContentPane().add(jlabel1);
peso = new JTextField();
peso.setLocation(47, 17);
peso.setSize(100, 30);
peso.setText("");
peso.setColumns(10);
getContentPane().add(peso);
jlabel2 = new JLabel();
jlabel2.setLocation(205, 17);
jlabel2.setSize(40, 30);
jlabel2.setText("Altura:");
getContentPane().add(jlabel2);
altura = new JTextField();
altura.setLocation(250, 17);
altura.setSize(100, 30);
altura.setText("");
altura.setColumns(10);
getContentPane().add(altura);
calcular = new JButton();
calcular.setLocation(50, 230);
calcular.setSize(100, 50);
calcular.setText("Calcular");
getContentPane().add(calcular);
calcular.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
imc.Imc();
}
});
reset = new JButton();
reset.setLocation(250, 230);
reset.setSize(100, 50);
reset.setText("Reset");
getContentPane().add(reset);
reset.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
imc.Reset();
}
});
jlabel3 = new JLabel();
jlabel3.setLocation(8, 100);
jlabel3.setSize(75, 30);
jlabel3.setText("Resultado:");
getContentPane().add(jlabel3);
resultado = new JTextField();
resultado.setLocation(70, 100);
resultado.setSize(100, 30);
resultado.setText("");
resultado.setColumns(10);
getContentPane().add(resultado);
resultado.setEditable(false);
jlabel4 = new JLabel();
jlabel4.setLocation(8, 150);
jlabel4.setSize(75, 30);
jlabel4.setText("Estado:");
getContentPane().add(jlabel4);
estado = new JTextField();
estado.setLocation(70, 150);
estado.setSize(100, 30);
estado.setText("");
estado.setColumns(10);
getContentPane().add(estado);
estado.setEditable(false);
}
}
IMC.java
public class IMC{
private Window window;
public void Imc() {
String p = window.peso.getText();
String h = window.altura.getText();
double p1 = Double.parseDouble(p);
double h1 = Double.parseDouble(h);
double imc = 1.3 * p1/ (Math.pow(h1, 2.5));
double arredondar = Math.round(imc * 10.0) / 10.0;
String total = String.valueOf(arredondar);
window.resultado.setText(total);
if (imc < 18.5) {
window.estado.setText("Magreza grave");
} else if (imc <= 25) {
window.estado.setText("Saudável");
} else if (imc > 25) {
window.estado.setText("Sobrepeso");
}
}
public void Reset() {
window.peso.setText("");
window.altura.setText("");
window.resultado.setText("");
window.estado.setText("");
}
}
当我点击计算按钮或重置按钮时,它会给我这个错误:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at com.eduardo.aio.functions.IMC.Imc(IMC.java:9)
at com.eduardo.aio.design.Window$2.actionPerformed(Window.java:102)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
这是因为我从actionlistener错误地调用了这个方法? 任何人都可以帮助我,我不知道如何解决这个问题。
感谢
答案 0 :(得分:0)
声明你的 imc 就像这样..
private IMC imc = new IMC();
问题解决了......