#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)
вместо этого, чтобы ваш код не был уязвим для опечатки.