我制作了一个程序,但在单击按钮时切换 JPanel 时遇到了困难。
有四个按钮>“时间”“酒店菜单”“价格”和“退出”
退出很简单。
其余的需要将 JPanel 更改为另一个 Panel。我有工作的价格和时间。但是时间停止工作,我无法更改酒店菜单。
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TravelAgentSystem {
public static void main(String[] args){
final Flights flightObject = new Flights();
// Creates the main JFrame where all the panels will be situated.
final JFrame mainFrame = new JFrame();
mainFrame.setLayout(new BorderLayout());
mainFrame.setTitle("Main Menu");
mainFrame.setVisible(true);
mainFrame.setSize(500,500);
mainFrame.setLocationRelativeTo(null);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// This is for the options Menu.
final JPanel flightPanel = new JPanel();
flightPanel.setLayout(new GridLayout(2,2));
JButton timeb, priceb, hotelb, exitb;
timeb = new JButton("Time");
priceb = new JButton ("Price");
hotelb = new JButton ("Hotels Menu");
exitb = new JButton ("Exit Program");
flightPanel.add(timeb);
flightPanel.add(priceb);
flightPanel.add(hotelb);
flightPanel.add(exitb);
mainFrame.add(flightPanel, BorderLayout.EAST);
// There will be 2 panels on the left hand side for options travelPanel
// and timePanel. These will be in another panel named leftPanel.
JPanel travelPanel = new JPanel();
travelPanel.setLayout(new GridLayout(2,2));
travelPanel.setVisible(true);
JPanel timePanel = new JPanel();
timePanel = new JPanel();
timePanel.setLayout(new GridLayout(2,1));
timePanel.setVisible(true);
JPanel leftPanel = new JPanel();
leftPanel.setLayout(new GridLayout(2,1));
leftPanel.setVisible(true);
JLabel Lfrom, Lto, LDeparture;
Lfrom = new JLabel("From");
Lto = new JLabel("To");
LDeparture = new JLabel("Departure Date (DD/MM/YY)");
String[] fromOptions = {"East Midlands","Birmingham","Heathrow","Manchester"};
String[] toOptions = {"New York", "Dahab", "Rome", "Sydney", "Tokyo"};
final JComboBox fromDest = new JComboBox(fromOptions);
final JComboBox toDest = new JComboBox(toOptions);
// This is for the date textbox.
JPanel datePanel = new JPanel();
datePanel.setLayout(new FlowLayout());
JTextField dateField = new JTextField();
dateField.setPreferredSize(new Dimension(100,20));
datePanel.add(dateField);
travelPanel.add(Lfrom);
travelPanel.add(fromDest);
travelPanel.add(Lto);
travelPanel.add(toDest);
timePanel.add(LDeparture);
timePanel.add(datePanel);
leftPanel.add(travelPanel);
leftPanel.add(timePanel);
mainFrame.add(leftPanel, BorderLayout.CENTER);
mainFrame.pack();
mainFrame.setVisible(true);
// This creates the panel where the Time duration of the flight is output.
final JPanel showTimePanel = new JPanel();
showTimePanel.setLayout(new FlowLayout());
showTimePanel.setVisible(false);
mainFrame.add(showTimePanel, BorderLayout.EAST);
final JPanel showPricePanel = new JPanel();
showPricePanel.setLayout(new FlowLayout());
showPricePanel.setVisible(false);
mainFrame.add(showPricePanel, BorderLayout.EAST);
// Creates the Panel for the Hotels Menu.
final JPanel hotelPanel = new JPanel();
hotelPanel.setVisible(false);
hotelPanel.setLayout(new GridLayout(3,3));
JButton hView,hAdd,hSort,hSave,hRetrieve,hExit;
hView = new JButton("View");
hAdd = new JButton ("Add");
hSort = new JButton("Sort");
hSave = new JButton ("Save");
hRetrieve = new JButton ("Retrieve");
hExit = new JButton ("Exit");
hotelPanel.add(hView);
hotelPanel.add(hAdd);
hotelPanel.add(hSort);
hotelPanel.add(hSave);
hotelPanel.add(hRetrieve);
hotelPanel.add(hExit);
// buttonHandler class does all the eventhandling for the buttons.
class buttonHandler implements ActionListener{
public void actionPerformed(ActionEvent event) {
JButton clickedButton = (JButton)event.getSource();
String buttonText = clickedButton.getText();
if (buttonText.equals("Exit Program")) {System.exit(0);}
else if (buttonText.equals("Hotels Menu")){
flightPanel.setVisible(false);
hotelPanel.setVisible(true);
}
else if (buttonText.equals("Time")){
int fromDestination = fromDest.getSelectedIndex();
int toDestination = toDest.getSelectedIndex();
flightObject.setTime(fromDestination, toDestination);
String timeTaken = flightObject.getTime();
JLabel timeLabel = new JLabel("The Duration of the Flight is: " + timeTaken);
showTimePanel.add(timeLabel);
flightPanel.setVisible(false);
showTimePanel.setVisible(true);
}
else if(buttonText.equals("Price")){
int fromDestination = fromDest.getSelectedIndex();
int toDestination = toDest.getSelectedIndex();
flightObject.setPrice(fromDestination, toDestination);
int Price = flightObject.getPrice();
JLabel priceLabel = new JLabel ("The Price of the Flight is: " + Price + " GBP");
showPricePanel.add(priceLabel);
flightPanel.setVisible(false);
showPricePanel.setVisible(true);
}
}
}
buttonHandler handler = new buttonHandler();
exitb.addActionListener(handler);
timeb.addActionListener(handler);
hotelb.addActionListener(handler);
priceb.addActionListener(handler);
}
}