0

, поэтому у меня есть этот Jframe, где вы заполняете текстовые поля, а при нажатии «Добавить» он должен создать объект Car и отправить его в базу данных. Но в слушателе я продолжаю получать java.lang.NullPointerException на textfieldname.getText(), хотя я ввожу какой-то текст в поле.Java GUI, создающий объекты с аргументами, взятыми из текстовых полей

Это Jframe.

public void newCar() 
    { 

     JLabel make = new JLabel("Brand:"); 
     JTextField maket = new JTextField(10); 

     JLabel model = new JLabel("Model:"); 
     JTextField modelt = new JTextField(10); 

     JLabel license = new JLabel("License Plate Numbers:"); 
     JTextField licenset = new JTextField(10); 

     JLabel color = new JLabel("Color:"); 
     JTextField colort = new JTextField(10); 

     JLabel year = new JLabel("Year:"); 
     final JTextField yeart = new JTextField(10); 
     yeart.addKeyListener(new KeyAdapter() 
     { 
     @Override 
     public void keyTyped(KeyEvent e) 
     { 
      super.keyTyped(e); 

      e.getKeyCode(); 

      if (!((int) e.getKeyChar() >= 48 && (int) e.getKeyChar() <= 57)) 
      { 
       e.consume(); 
      } 
     } 

     }); 
     JLabel horse = new JLabel("Horse Power: "); 
     JTextField horset = new JTextField(10); 
     JLabel isAvailable = new JLabel("Car Status:"); 
     JLabel isAvailablet = new JLabel("Available"); 
     JLabel time = new JLabel("Time Until Service: "); 
     JTextField timet = new JTextField(10); 
     JLabel consumption = new JLabel("Consumption per 100km: "); 
     JTextField consumptiont = new JTextField(10); 
     JLabel seats = new JLabel("Number of Seats: "); 
     JTextField seatst = new JTextField(10); 
     seatst.addKeyListener(new KeyAdapter() 
     { 
     @Override 
     public void keyTyped(KeyEvent e) 
     { 
      super.keyTyped(e); 

      e.getKeyCode(); 

      if (!((int) e.getKeyChar() >= 48 && (int) e.getKeyChar() <= 57)) 
      { 
       e.consume(); 
      } 
     } 

     }); 

     JLabel transmission = new JLabel("Transmission "); 
     JComboBox transmissiont = new JComboBox<String>(); 
     JLabel climate = new JLabel("Climate Control: "); 
     JComboBox climatet = new JComboBox<String>(); 

     JFrame window = new JFrame("New Car"); 

     JPanel newCarButtons = new JPanel(); 

     newCarButtons.setLayout(new FlowLayout()); 

     saveCar = new JButton("Save"); 
     saveCar.addActionListener(buttonListener); 
     newCarButtons.add(saveCar); 

     cancelCar = new JButton("Cancel"); 
     cancelCar.addActionListener(buttonListener); 
     newCarButtons.add(cancelCar); 

     JPanel newCarText = new JPanel(); 

     GroupLayout group = new GroupLayout(newCarText); 
     newCarText.setLayout(group); 

     group.setAutoCreateGaps(true); 
     group.setAutoCreateContainerGaps(true); 

     newCarText.add(make); 
     newCarText.add(maket); 

     newCarText.add(model); 
     newCarText.add(modelt); 

     newCarText.add(license); 
     newCarText.add(licenset); 

     newCarText.add(color); 
     newCarText.add(colort); 

     newCarText.add(year); 
     newCarText.add(yeart); 

     newCarText.add(horse); 
     newCarText.add(horset); 

     newCarText.add(isAvailable); 
     newCarText.add(isAvailablet); 

     newCarText.add(time); 
     newCarText.add(timet); 

     newCarText.add(consumption); 
     newCarText.add(consumptiont); 

     newCarText.add(seats); 
     newCarText.add(seatst); 

     JLabel doors = new JLabel("Number of Doors: "); 
     JTextField doorst = new JTextField(10); 

     doorst.addKeyListener(new KeyAdapter() 
     { 
     @Override 
     public void keyTyped(KeyEvent e) 
     { 
      super.keyTyped(e); 

      e.getKeyCode(); 

      if (!((int) e.getKeyChar() >= 48 && (int) e.getKeyChar() <= 57)) 
      { 
       e.consume(); 
      } 
     } 

     }); 

     newCarText.add(doors); 
     newCarText.add(doorst); 

     transmissiont.addItem("Auto"); 
     transmissiont.addItem("Manual"); 

     transmissiont.addActionListener(buttonListener); 

     newCarText.add(transmission); 
     newCarText.add(transmissiont); 

     climatet.addItem("Yes"); 
     climatet.addItem("No"); 

     newCarText.add(climate); 
     newCarText.add(climatet); 

     GroupLayout.SequentialGroup hGroup = group.createSequentialGroup(); 

     hGroup.addGroup(group.createParallelGroup().addComponent(make) 
      .addComponent(model).addComponent(license).addComponent(color) 
      .addComponent(time).addComponent(consumption).addComponent(year) 
      .addComponent(horse).addComponent(isAvailable).addComponent(seats) 
      .addComponent(doors).addComponent(transmission) 
      .addComponent(climate)); 

     hGroup.addGroup(group.createParallelGroup().addComponent(maket) 
      .addComponent(modelt).addComponent(licenset).addComponent(colort) 
      .addComponent(timet).addComponent(consumptiont).addComponent(yeart) 
      .addComponent(isAvailablet).addComponent(horset) 
      .addComponent(seatst).addComponent(doorst) 
      .addComponent(transmissiont).addComponent(climatet)); 

     group.setHorizontalGroup(hGroup); 

     GroupLayout.SequentialGroup vGroup = group.createSequentialGroup(); 

     vGroup.addGroup(group.createParallelGroup(Alignment.BASELINE) 
      .addComponent(make).addComponent(maket)); 
     vGroup.addGroup(group.createParallelGroup(Alignment.BASELINE) 
      .addComponent(model).addComponent(modelt)); 
     vGroup.addGroup(group.createParallelGroup(Alignment.BASELINE) 
      .addComponent(license).addComponent(licenset)); 
     vGroup.addGroup(group.createParallelGroup(Alignment.BASELINE) 
      .addComponent(color).addComponent(colort)); 
     vGroup.addGroup(group.createParallelGroup(Alignment.BASELINE) 
      .addComponent(year).addComponent(yeart)); 
     vGroup.addGroup(group.createParallelGroup(Alignment.BASELINE) 
      .addComponent(horse).addComponent(horset)); 
     vGroup.addGroup(group.createParallelGroup(Alignment.BASELINE) 
      .addComponent(time).addComponent(timet)); 
     vGroup.addGroup(group.createParallelGroup(Alignment.BASELINE) 
      .addComponent(consumption).addComponent(consumptiont)); 
     vGroup.addGroup(group.createParallelGroup(Alignment.BASELINE) 
      .addComponent(isAvailable).addComponent(isAvailablet)); 
     vGroup.addGroup(group.createParallelGroup(Alignment.BASELINE) 
      .addComponent(seats).addComponent(seatst)); 
     vGroup.addGroup(group.createParallelGroup(Alignment.BASELINE) 
      .addComponent(doors).addComponent(doorst)); 
     vGroup.addGroup(group.createParallelGroup(Alignment.BASELINE) 
      .addComponent(transmission).addComponent(transmissiont)); 
     vGroup.addGroup(group.createParallelGroup(Alignment.BASELINE) 
      .addComponent(climate).addComponent(climatet)); 

     group.setVerticalGroup(vGroup); 

     JPanel newCar = new JPanel(); 
     newCar.setLayout(new BorderLayout()); 

     newCar.add(newCarText, BorderLayout.NORTH); 
     newCar.add(newCarButtons, BorderLayout.SOUTH); 

     newCar.setBorder(new TitledBorder(BorderFactory 
      .createLineBorder(Color.black), "[New Car]", 2, 0)); 


     window.add(newCar); 
     window.setLocationRelativeTo(null); 
     window.setSize(400, 450); 
     window.setVisible(true); 

    } 

Кнопка Слушатель: (Игнорировать значение занесены, я просто тестирование, если объект передается на все, так что я должен был ввести несколько значений, так как я имею проблемы с .getText())

private class MyButtonListener implements ActionListener 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
     if (e.getSource() == addCars) 
     { 
      newCar(); 

     } 

     if (e.getSource() == saveCar) 
     { 
      adapter = new DatabaseAdapter2(); 

      // Car car1 = new Car("ss", "ss", 
      // "sd", "ss", 
      // 15, "ss","ss", 
      // "ss", "ss", 2, 2, "ss", 
      // "ss", 2); 

      Car car1 = new Car(maket.getText(), "test", "test", "test", 2011, 
        "test", "test", "test", "test", 2011, 2011, "test", "test", 2); 
      System.out.println(car1); 

      adapter.addCar(car1); 
     } 
     if (e.getSource() == cancelCar) 
     { 

     } 

     if (e.getSource() == getCars) 
     { 

     } 
     if (e.getSource() == removeCars) 
     { 

     } 
     if (e.getSource() == editCars) 
     { 

     } 
     if (e.getSource() == infoCars) 
     { 

     } 
     if (e.getSource() == addClients) 
     { 
      newClient(); 
     } 
     if (e.getSource() == removeClients) 
     { 

     } 
     if (e.getSource() == editClients) 
     { 

     } 
     if (e.getSource() == infoClients) 
     { 

     } 
     if (e.getSource() == addAutoCampers) 
     { 

     } 
     if (e.getSource() == removeAutoCampers) 
     { 

     } 
     if (e.getSource() == editAutoCampers) 
     { 

     } 
     if (e.getSource() == infoAutoCampers) 
     { 

     } 
     if (e.getSource() == addBookings) 
     { 
      newBooking(); 
     } 
     if (e.getSource() == removeBookings) 
     { 

     } 
     if (e.getSource() == editBookings) 
     { 

     } 
     if (e.getSource() == infoBookings) 
     { 

     } 

     // if (e.getSource() == transmissiont) 
     // { 
     // if (transmissiont.getSelectedItem()) 
     // { 
     // Student temp = (Student)studentBox.getSelectedItem(); 
     // firstNameField.setText(temp.getFirstName()); 
     // lastNameField.setText(temp.getLastName()); 
     // } 
     // } 

     } 
    } 
} 
+0

'maket' не определен в Прослушиватель – Blub

+0

Я думаю, вы получаете сообщение об ошибке на этой строке 'Car car1 = new Car (maket.getText()," test "," test "," test ", 2011,' потому что вы звоните метод объекта 'maket', но объект' maket' не определен в классе 'MyButtonListener'. – Rohan

+0

Есть ли какой-то способ определить их по всему миру? – FancyPants

ответ

1

Похоже, у вас есть проблема контекста.

Вы указали все свои поля в методе newCar, что означает, что те поля, которые вы используете на экране, не совпадают с теми, к которым вы, похоже, обращаетесь в пределах метода actionPerformed.

Try удаления JTextField до имен переменных (в методе newCar), и в случае необходимости, объявить недостающие поля как переменные экземпляра

Вы должны также избегать использования KeyListener с на текстовые поля, к тому времени вы» повторно уведомляется о ключевом событии, оно уже применяется к полям Document.

Вместо этого, вы должны рассмотреть возможность использования DocumentFilter

Отъезд

Смежные вопросы