views:

21

answers:

2

Hi, I have code that displays a menu and 4 JButtons in a JFrame. I tested the code last night and everything was working fine. Now the JButtons do not appear in the JFrame today in the morning. I tried doing in Eclipse and still I got the same result.

The output I am getting :

alt text


My code:


import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JSeparator;

public class Control  {

//JFrame
JFrame main = new JFrame();

//MenuBar
JMenuBar menuBar = new JMenuBar();

//Adding the menu
JMenu fileMenu = new JMenu("File");
JMenu functionMenu = new JMenu("Function");
JMenu helpMenu = new JMenu("Help");



//Adding the Menu Item
JMenuItem addFlight = new JMenuItem("Add Flight");
JMenuItem exit = new JMenuItem("Exit");
JMenuItem landFlight = new JMenuItem("Land Flight");
JMenuItem virtualPath = new JMenuItem("Virtual Path");
JMenuItem flightDetails = new JMenuItem("Flight Details");
JMenuItem about = new JMenuItem("About ...");







//JPanel
JPanel pnlButton = new JPanel();

//Buttons
JButton btnAddFlight = new JButton("Add Flight");
JButton btnLandFlight = new JButton("Land Flight");
JButton btnVirtualPath = new JButton("Virtual Path");
JButton btnFlightDetails = new JButton("Flight Details");



public Control() {
    //Adding to the file menu
    fileMenu.add(addFlight);
    fileMenu.add(exit);


    //Adding to the function menu
    functionMenu.add(landFlight);
    functionMenu.add(virtualPath);
    functionMenu.add(flightDetails);



    //Adding to the help menu
    helpMenu.add(about);


    exit.add(new JSeparator());
    flightDetails.add(new JSeparator());

    //Adding the Menus to the Menu Bar
    menuBar.add(fileMenu);
    menuBar.add(functionMenu);
    menuBar.add(helpMenu);






    //FlightInfo setbounds
    btnAddFlight.setBounds(30, 30, 120, 30);
    btnLandFlight.setBounds(30, 80, 120, 30);
    btnVirtualPath.setBounds(30, 130, 120, 30);
    btnFlightDetails.setBounds(30, 180, 120, 30);



    //JPanel bounds
    pnlButton.setLayout(null);



    //Adding to JFrame
    pnlButton.add(btnAddFlight);
    pnlButton.add(btnLandFlight);
    pnlButton.add(btnVirtualPath);
    pnlButton.add(btnFlightDetails);


    main.add(pnlButton);

    // JFrame properties
    main.setJMenuBar(menuBar);
    main.setLayout(null);
    main.setBackground(Color.red);
    main.setSize(800, 300);


    main.setTitle("Air Traffic Control");

    main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    main.setVisible(true);

    //Adding the actionlistener
    //btnAddFlight.addActionListener(new AddFlight());
    //btnLandFlight.addActionListener(new LandFlight());







}

public static void main(String[] args) {

    new Control();

}
}

I want to make the JButtons appear on the JFrame.

Many Thanks

+3  A: 

You shouldn't add widgets (pnlButton) directly to the JFrame, you need to add them to a sub panel that is automatically created for you called the content pane. To get the content pane do

Container cp = main.getContentPane();

so then do

cp.add(pnlButton);

It's typically a bad idea to use a null layout with absolute positioning, btw.

MeBigFatGuy
i removed the null layout code and now it is working. Should I use Container also.
Haxed
+1  A: 

Use GridBagLayout instead of null layout.
visit the following links for reference

http://www.java2s.com/Code/Java/Swing-JFC/WorkGridBagConstraints3.htm

http://download.oracle.com/docs/cd/E17409_01/javase/tutorial/uiswing/layout/gridbag.html

Paul
thks for reply man
Haxed