切换JPanels - 单击按钮时不切换

时间:2013-04-24 08:00:42

标签: java swing jpanel actionlistener cardlayout

我已经制作了一个程序,但是只需点击一下按钮就可以切换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);

    }

}

1 个答案:

答案 0 :(得分:0)

当您将另一个组件添加到同一位置时,

BorderLayout会替换组件。

mainFrame.add(showTimePanel, BorderLayout.EAST);

mainFrame.add(showPricePanel, BorderLayout.EAST);