如何添加到BorderLayout.Center?

时间:2018-05-07 06:18:37

标签: java swing layout layout-manager border-layout

我无法添加到BorderLayout的中心。几个屏幕上什么都没有出现。此代码仍在开发中,但它是专为汽车租赁服务而设计的。我们最终将代码连接到JDBC,并让数据库返回相应的结果。理想情况下,代码在用户使用服务时会显示多个屏幕。一个屏幕将让他们输入他们的信息,另一个屏幕将过滤不同的汽车选项,然后最终结果是显示连接的数据库返回的结果。我将多个面板添加到BorderLayout的中心,但我最初并没有将它们设置为可见。按下按钮时,它们将变为可见。

//The following is the beginning of our code. It is not complete yet

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.sql.*;
import java.util.Scanner;

public class Rental extends JFrame implements ActionListener, Customer, Car
{
    Container cont = getContentPane();

    Font myFont = new Font("tester ", Font.BOLD, 34);

    BorderLayout border = new BorderLayout();
    FlowLayout flow = new FlowLayout();
    GridLayout grid1 = new GridLayout(0,1);

    JPanel testPanel = new JPanel(); //Panel where I tried to add to center

    /* myDrive logo */
        JButton custom;

    /*Opening Screen: */ 
    JPanel welcomePnl = new JPanel();
    JLabel titleLbl = new JLabel("");
    //This is a draft summary//
    JLabel info = new JLabel(" Welcome to myDrive!. myDrive is a car rental application designed for you to choose a car based on your preferences.");
    JPanel btnPnl = new JPanel();
    JPanel btnPnl2 = new JPanel(); //contains Car instead of begin

    JCheckBox yesBox = new JCheckBox("Agree to Terms & Conditions");
    JCheckBox noBox = new JCheckBox(" Do Not Agree");

    /* Rental Panel--Screen 2: Fields for user to enter for rental*/
    JPanel rentalPnl = new JPanel();
    JTextField nameField = new JTextField("First Name");
    JTextField lastName = new JTextField("Last Name");
    JButton carBtn = new JButton("Car"); //continues next

    /*Car Panel--Screen 3: Car panel for car options*/
    JPanel carPnl = new JPanel();
    JPanel brandPnl = new JPanel(); //brands
    JPanel colorPnl = new JPanel(); //colors
    JLabel carLbl = new JLabel("Welcome to the Car selection screen:");
    JCheckBox brand1 = new JCheckBox("BMW");
    JCheckBox brand2 = new JCheckBox("Mercedez");
    JCheckBox brand3 = new JCheckBox("Tesla");
    JCheckBox brand4 = new JCheckBox("Ford");
    JCheckBox brand5 = new JCheckBox("Chrystler");

    JCheckBox color1 = new JCheckBox("Black");
    JCheckBox color2 = new JCheckBox("Silver");
    JCheckBox color3 = new JCheckBox("Red");
    JCheckBox color4 = new JCheckBox("Blue");

    JCheckBox drive1 = new JCheckBox("AWD");
    JCheckBox drive2 = new JCheckBox("TWD");

    JButton beginBtn = new JButton("Begin");
    JButton exitBtn = new JButton("Exit");

    //Constructor
    public Rental()
    {
        super("MyDrive");
        cont.add(testPanel, BorderLayout.CENTER);
        testPanel.setBackground(Color.PINK);

        cont.setLayout(border); //border layout for the container

        //Opening Screen
        beginBtn.addActionListener(this);
        beginBtn.setToolTipText("Being your rental process");
        exitBtn.addActionListener(this);
        welcomePnl.setBackground(Color.GRAY);
        welcomePnl.add(titleLbl);
        welcomePnl.add(info);
        info.setVisible(true);
        cont.add(info, BorderLayout.CENTER);
        cont.add(welcomePnl, BorderLayout.NORTH);
        titleLbl.setFont(myFont);

        cont.add(btnPnl, BorderLayout.SOUTH);
        btnPnl.setLayout(flow);
        btnPnl.setBackground(Color.black);
        btnPnl.add(beginBtn);
        beginBtn.setVisible(false);
        btnPnl.add(carBtn);
        carBtn.setVisible(false);
        btnPnl.add(exitBtn);

        nameField.setVisible(false);
        lastName.setVisible(false);
        carBtn.addActionListener(this);
        carBtn.setVisible(false);
        rentalPnl.add(carBtn, BorderLayout.SOUTH);
        rentalPnl.add(nameField);
        rentalPnl.add(lastName);
        rentalPnl.setLayout(flow);
        cont.add(rentalPnl);

        // for logo//
                Icon b = new ImageIcon(getClass().getResource("myDrive.png"));
                custom= new JButton(b);
                welcomePnl.add(custom);

                welcomePnl.add(yesBox);
                welcomePnl.add(noBox);

                yesBox.addActionListener(this);
                noBox.addActionListener(this);

        //carPnl.add(carLbl, BorderLayout.NORTH);
        brandPnl.setLayout(grid1);
        brandPnl.setVisible(false);
        brandPnl.setBackground(Color.GRAY);
        brandPnl.add(brand1);
        brandPnl.add(brand2);
        brandPnl.add(brand3);
        brandPnl.add(brand4);
        brandPnl.add(brand5);

        colorPnl.setLayout(grid1);
        colorPnl.setVisible(false);
        colorPnl.setBackground(Color.GRAY);
        colorPnl.add(color1);
        colorPnl.add(color2);
        colorPnl.add(color3);
        colorPnl.add(color4);

        carPnl.add(drive1);
        carPnl.add(drive2);
        carPnl.setVisible(false);
        cont.add(brandPnl, border.EAST);
        cont.add(colorPnl, border.WEST);
        cont.add(carPnl);
        carLbl.setVisible(false);
    }

    @Override
    public void actionPerformed(ActionEvent e) 
    {
        Object source = e.getSource();

        if (source == yesBox)
        {
            beginBtn.setVisible(true);
        }

        if(source == noBox)
        {
            System.exit(0);
        }

        if(source == beginBtn)
        {
            welcomePnl.setVisible(false);
            btnPnl.setVisible(true);
            btnPnl.remove(beginBtn);
            btnPnl.add(carBtn);
            carBtn.setVisible(true);

            rentalPnl.setVisible(true);
            nameField.setVisible(true);
            String fName = nameField.getText();
            lastName.setVisible(true);
            String lName = lastName.getText();
        }

        if(nameField != null & lastName != null && source == carBtn)
        {
            carBtn.setEnabled(true);
            rentalPnl.setVisible(false);
            carLbl.setVisible(true);
            brandPnl.setVisible(true);
            colorPnl.setVisible(true);
            cont.add(carLbl, border.NORTH);
        }

        if(source == exitBtn)
            System.exit(0);
    }

    //Main Method
    //Sets the size of the myDrive screen- size is not resizable (cannot be changed while using program)
    public static void main(String[] args)
    {
        Rental r1 = new Rental(); //new rental
        r1.setSize(600,600);
        r1.setVisible(true);
        r1.setDefaultCloseOperation(EXIT_ON_CLOSE);
        r1.setResizable(false);

        try {
            // to get a connection to the SQL database//
            String dbUrl = "jcbc:mysql://localhost:3306/demo";
            String user = "student";
            String password= "student";

            Connection myConn = DriverManager.getConnection(dbUrl, user, password);
            //a statement object, to execute the SQL query
            Statement myStmt = myConn.createStatement();

            //insert a new employee//
            System.out.println("Inserting a new employee to database\n");

            //using the statement object to insert data, the executeUpdate statemnt is a method to handle any update to the database, can be used for insert, update, and deletes//
            //demo code below//
            /*int rowsAffected = myStmt.executeUpdate(

                    //"insert into employees " + "(last_name, first_name, email, department, salary)" + "values" + "('Wright, 'Eric', 'eric.wright@foo.com', 'HR', 33000.00)"
                    //);

                    "insert into employees " + "(last_name, first_name, email, department, salary)" + "values" + "(" + name2 + "," + name1 + "," + onlinemail + ")"
                    );
            */
            //this will return a result set//
            ResultSet myRs = myStmt.executeQuery("select * from employees order by last_name");

            // Process the result set, reads data from each row

            // getter method to print out the last and first name from the result set//
            while (myRs.next())
            {
                System.out.println(myRs.getString("last_name") + ", " + myRs.getString(("first_name")));
            } 

            }

            catch (Exception exc) {
                exc.printStackTrace();
            }
            /*
            finally {

                if (myRs != null)
                {
                    myRs.close();
                }
            }
            */
        }

    public String getBrand() 
    {
        return null;
    }

    @Override
    public String getColor() 
    {
        return null;
    }

    @Override
    public int getYear() 
    {
        return 0;
    }

    @Override
    public int getMiles() 
    {
        return 0;
    }

    @Override
    public String getDriveType() 
    {
        return null;
    }
}

1 个答案:

答案 0 :(得分:1)

尝试在使用布局添加组件之前设置布局:

    cont.setLayout(border); //border layout for the container
    cont.add(testPanel, BorderLayout.CENTER);