2013-12-04 4 views
-1

Так что я сделал GUI, который в этом случае, если вы хотите добавить автомобиль в базу данных, вы нажмите кнопку «Добавить» затем JFrame выскакивает со следующим кодом:Java GUI Добавление объектов в базу данных

public void newCar() 
    { 


     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); 

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

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

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

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

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

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

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

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

     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(); 
      } 
     } 

     }); 

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

     JLabel horse = new JLabel("Horse Power: "); 
     JTextField horset = new JTextField(10); 

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

     JLabel isAvailable = new JLabel("Car Status:"); 
     JLabel isAvailablet = new JLabel("Available"); 

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

     JLabel time = new JLabel("Time Until Service: "); 
     JTextField timet = new JTextField(10); 

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

     JLabel consumption = new JLabel("Consumption per 100km: "); 
     JTextField consumptiont = new JTextField(10); 

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



     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(); 
      } 
     } 

     }); 

     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); 

     JLabel transmission = new JLabel("Transmission "); 
     JComboBox transmissiont = new JComboBox<String>(); 

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

     transmissiont.addActionListener(buttonListener); 

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

     JLabel climate = new JLabel("Climate Control: "); 
     JComboBox climatet = new JComboBox<String>(); 
     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)); 

     Car car1= new Car(maket.getText(), modelt.getText(), licenset.getText(), colort.getText(), Integer.parseInt("yeart.getText()"), null, horset.getText(), timet.getText(), consumptiont.getText(), Integer.parseInt("seatst.getText()"), Integer.parseInt("doorst.getText()"), null, null, 0); 

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

    } 

Обратите внимание, что внизу находится объект автомобиля. Здесь мне нужна ваша помощь. Адаптер при добавлении автомобилей берет объект Car в качестве аргумента, поэтому идея состоит в том, чтобы заполнить все текстовые поля и на основе введенного вами текста вы создадите новый объект Car. Но если я это сделаю, то он просто создаст пустой объект «Автомобиль», так как при открытии окна у вас ничего нет в текстовых полях. Итак, как это сделать, когда вы нажимаете «Добавить», он отправляет заполненный объект «Автомобиль» на основе содержимого в текстовых полях?

Кнопка СЛУШАТЕЛЬ:

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

     } 

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

      adapter.addCar(car); 
     } 
     } 
    } 
+0

Что это _this_ значит «_when нажать кнопку„Добавить“его отправляет заполненный Автомобильный объект_ »? Я действительно не понимаю, в чем проблема. –

+0

моя проблема в том, что я не знаю, как отправить объект автомобиля, который имеет все аргументы, которые он должен извлечь из текстовых полей в JPanel, в базу данных. – FancyPants

+0

Какую базу данных вы используете? –

ответ

0

Почему вы не просто передать свой car объект в качестве аргумента newCar метода и инициализировать соответствующие поля там так же, как вы делаете, когда вы сохраняющиеся экземпляр автомобиля?

if (e.getSource() == addCars) 
{ 
    newCar(car); 

} 

запомнить изменить newCar метод подписи.

public void newCar(Car newCar) 
    { 
    //DO WHATEVER YOU WANT WITH THAT DATA AND INITIALIZE PROPER FIELDS 

     JFrame window = new JFrame("New Car"); 
    (.....) 
+0

, но как насчет 'if (e.getSource() == saveCar) { адаптер.addCar (автомобиль); } ' Мне нужно, чтобы после нажатия кнопки« Добавить »он отправил запросы к базе данных с этим объектом. Но мне нужно, чтобы поля объекта заполнялись в панели newCar. – FancyPants

+0

Оберните его в правильную логику. Вы ведь программист? – Antoniossss

+0

Ваш JFrame «видит» базу данных или есть другой объект, который у вас есть, который обрабатывает транзакции базы данных? Вы хотите подтвердить свою запись автомобиля, когда нажата кнопка «Добавить», а затем передать автомобиль объекту, который может «видеть» базу данных, а затем убедиться, что этот класс подтвердил, что автомобиль в порядке, а затем включить этот класс в база данных. Или вы можете сделать это из JFrame, если вам нравится проходить через соединения с базой данных. – Compass

0

Это должно идти внутри слушателя

Car car1= new Car(maket.getText(), modelt.getText(), licenset.getText(), 
       colort.getText(), Integer.parseInt("yeart.getText()"), null, 
       horset.getText(), timet.getText(), consumptiont.getText(), 
       Integer.parseInt("seatst.getText()"), 
       Integer.parseInt("doorst.getText()"), 
       null, null, 0); 

Вы хотите получить текст при нажатии кнопки. Не в конструкторе

private class MyButtonListener implements ActionListener 
{ 
    public void actionPerformed(ActionEvent e) 
    { 
     if (e.getSource() == addCars) 
     { 
      newCar(); // I don't know what you're trying to do here 
     } 

     if (e.getSource() == saveCar) 
     { 
      Car car1= new Car(maket.getText(), modelt.getText(), licenset.getText(), 
        colort.getText(), Integer.parseInt("yeart.getText()"), null, 
        horset.getText(), timet.getText(), consumptiont.getText(), 
        Integer.parseInt("seatst.getText()"), 
        Integer.parseInt("doorst.getText()"), 
        null, null, 0); 

      // add car1 to database 
     } 
    } 
} 

Edit: Объявить все текстовые поля в качестве членов класса, то вы можете использовать их в YOUT слушатель класса

public class GUI{ 
    JTextFeild maket = new JTextField(); 
    JTextFeild licenset = new JTextField(); 
    JTextFeild colort = new JTextField(); 
    JTextFeild yeart = new JTextField(); 
    JTextFeild horset = new JTextField(); 
    JTextFeild timet = new JTextField(); 
    JTextFeild consumptiont = new JTextField(); 
    JTextFeild maket = new JTextField(); 

    public void newCar(){ 
     ... // remove your textfields from here. 
    } 

    public static void main(String[] args){ 
     ... 
    } 

    private class MyButtonListener implements ActionListener 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      if (e.getSource() == addCars) 
      { 
       newCar(); // I don't know what you're trying to do here 
      } 

      if (e.getSource() == saveCar) 
      { 
       Car car1= new Car(maket.getText(), modelt.getText(), licenset.getText(), 
        colort.getText(), Integer.parseInt("yeart.getText()"), null, 
        horset.getText(), timet.getText(), consumptiont.getText(), 
        Integer.parseInt("seatst.getText()"), 
        Integer.parseInt("doorst.getText()"), 
        null, null, 0); 

       // add car1 to database 
      } 
     } 
    } 
} 
+0

Пробовал это уже, я получаю ошибку, потому что он не распознает поля 'maket не может быть разрешен' – FancyPants

+0

Убедитесь, что вы объявляете все свое текстовое поле как члены класса, а не в конструкторе –

+0

что вы имеете в виду? – FancyPants

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