Кнопка Java JFrame не отвечает

#java #swing #jbutton #actionlistener

Вопрос:

Я создаю простую программу аренды автомобилей на Java для университетской курсовой работы. В соответствии с требованиями к курсовой работе для этого требуется, чтобы у меня были определенные кнопки, одна для покупки автомобиля и одна для аренды автомобиля. У меня есть класс CarToBuy, класс CarToRent, и это подклассы класса Car. JFrame находится в своем собственном классе с именем «CarCompany».

Кнопка «Добавить автомобиль для покупки» работает правильно, но кнопка «Добавить автомобиль в аренду» не работает, хотя код очень похож. CarToBuy вызывает методы getDescription, getPrice, getYear и getMileage, в то время как CarToRent вызывает getDescription, getadminfee и getdailyrate, хотя я пытался заставить CarToRent вызывать те же методы, но кнопка по-прежнему ничего не делает при нажатии.

Это кнопки CarToBuy и CarToRent

 public void addCarToBuy()
    {

     CarToBuy newCarToBuy= new CarToBuy (getDescription(), getPrice(), getYear(), getMileage());
                        
        item.add(newCarToBuy);
        JOptionPane.showMessageDialog(frame,"A new car to buy has been added");

    }


public void addCarToRent()
    {

     CarToRent newCarToRent= new CarToRent (getDescription(), getadminfee(), getdailyrate());
                        
        item.add(newCarToRent);
        JOptionPane.showMessageDialog(frame,"A new car to rent has added");

    }
 

Вот код JFrame

 frame = new JFrame("CarCompany");
        Container contentPane = frame.getContentPane();
        
        JLabel priceLable = new JLabel("Price:");
        JLabel yearLable = new JLabel("Year:");
        JLabel mileageLable = new JLabel("Mileage:");
        JLabel emptyspaceLable = new JLabel(" ");
        JLabel emptyspace2Lable = new JLabel(" ");
        
        JLabel sizeLable = new JLabel("Size:");
        
        JLabel descriptionLable = new JLabel("Description:");
        JLabel adminfeeLable = new JLabel("Admin Fee:");
        JLabel dailyrateLable = new JLabel("Daily Rate:");
        
        JLabel customernameLable = new JLabel("Customer Name:");
        JLabel rentaldateLable = new JLabel("Rental Date:");
        JLabel returndateLable = new JLabel("Return Date:");
        JLabel numberofdaysLable = new JLabel("Number of Days:");
        JLabel carnumberLable = new JLabel("Car Number:");
               
        
        
        // TEXTBOXES  
             
        priceTextbox = new JTextField(10);
        yearTextbox = new JTextField(10);
        mileageTextbox = new JTextField(10);
        descriptionTextbox = new JTextField (10);
        adminfeeTextbox = new JTextField (10);
        dailyrateTextbox = new JTextField (10);
        customernameTextbox = new JTextField (10);
        rentaldateTextbox = new JTextField (10);
        returndateTextbox = new JTextField (10);
        numberofdaysTextbox = new JTextField (10);
        carnumberTextbox = new JTextField (10);
               
        
        
        // BUTTONS
                
        addCarToBuyButton = new JButton("Add Car To Buy");
        addCarToBuyButton.addActionListener(this); 
        addCarToRentButton = new JButton("Add Car to Rent");
        addCarToRentButton.addActionListener(this);
        addBuyCarButton = new JButton("Buy Car");
        addBuyCarButton.addActionListener(this);
        addDisplayAllButton = new JButton("Display All");
        addDisplayAllButton.addActionListener(this);
        addRentCarButton = new JButton("Rent Car");
        addRentCarButton.addActionListener(this);
        addClearButton = new JButton("Clear");
        addClearButton.addActionListener(this);
        addReturnCarButton = new JButton("Return Car");
        addReturnCarButton.addActionListener(this);
        
        
        
        // LAYOUT
        
        contentPane.setLayout(new GridLayout(0, 4));
        
        

        // GUI
        
        contentPane.add(priceLable);
        contentPane.add(yearLable);
        contentPane.add(mileageLable);
        contentPane.add(emptyspaceLable);
        
        contentPane.add(priceTextbox);  
        contentPane.add(yearTextbox);
        contentPane.add(mileageTextbox);
        contentPane.add(addCarToBuyButton);
        
        contentPane.add(descriptionLable);
        contentPane.add(adminfeeLable);
        contentPane.add(dailyrateLable);
        contentPane.add(emptyspace2Lable);
                
        contentPane.add(descriptionTextbox);
        contentPane.add(adminfeeTextbox);
        contentPane.add(dailyrateTextbox);
        contentPane.add(addCarToRentButton);
        
        contentPane.add(customernameLable);
        contentPane.add(rentaldateLable);
        contentPane.add(returndateLable);
        contentPane.add(numberofdaysLable);
        
        contentPane.add(customernameTextbox);
        contentPane.add(rentaldateTextbox);
        contentPane.add(returndateTextbox);
        contentPane.add(numberofdaysTextbox);
        
        contentPane.add(carnumberLable);
        contentPane.add(addBuyCarButton);
        contentPane.add(addRentCarButton);
        contentPane.add(addReturnCarButton);
        
        contentPane.add(carnumberTextbox);
        contentPane.add(addDisplayAllButton);
        contentPane.add(addClearButton);
                
        frame.pack();
        frame.setVisible(true);

 

The action code for the buttons is here

 public void actionPerformed(ActionEvent event)
    {

        String command = event.getActionCommand();
        if (command.equals("Add Car To Buy")) {
            addCarToBuy();
        }

        if (command.equals("Add Car To Rent")) {
            addCarToRent();
        }

    }
 

These are the methods that are being called

 public String getDescription()

    {

        String aDescription=descriptionTextbox.getText();
        return aDescription;

    }
    
    public int getPrice()
    {
        
        int aPrice=Integer.parseInt(priceTextbox.getText());
        return aPrice;

    }
    
    public int getYear()
    {
        
        int aYear=Integer.parseInt(yearTextbox.getText());
        return aYear;

    }
    
    public int getMileage()
    {
        
        Integer aMileage=Integer.parseInt(mileageTextbox.getText());
        return aMileage;

    }
    
    public int getadminfee()

    {

        int aadminfee=Integer.parseInt(adminfeeTextbox.getText());
        return aadminfee;

    }
    
    public int getdailyrate()

    {

        int adailyrate=Integer.parseInt(dailyrateTextbox.getText());
        return adailyrate;
        
    }

 

Я также помещу здесь конструктор для классов CarToBuy и CarToRent

 
public CarToRent(String thecarDescription, int carAdminFee, int carDailyRate)
    {
        super(thecarDescription);
        adminFee = carAdminFee;
        dailyRate = carDailyRate;
        rentDate = "";
        returnDate = "";
        daysRented = 0;
        totalAccumulated = 0;
        onLoan = false;
    }

public CarToBuy(String thecarDescription, int carPrice, int regYear, int carMileage)
    {
        super(thecarDescription);
        price = carPrice;
        year = regYear;
        mileage = carMileage;
        sold = false;
    }
 

Любая помощь в выяснении того, почему кнопка «Добавить автомобиль в аренду» ничего не делает, будет очень признательна!

Комментарии:

1. Вы не показали никакого кода пользовательского интерфейса, а только свою модель. Имея только эту информацию, мы ничего не можем сказать. Зарегистрировали ли вы действие или прослушиватель действий на всех своих кнопках? Вы проверили (в идеале с помощью отладчика), что они вызываются?

2. new JButton("Add Car to Rent") использует строчный t регистр , в то время if (command.equals("Add Car To Rent")) как использует верхний регистр T . Вы могли бы заметить это, добавив System.out.println(command); в свой метод actionPerformed. Возможно, вы захотите использовать if (action.getSource() == addCarToRentButton) вместо этого, чтобы ваш код не был уязвим для опечатки.