Question

Here is the key code:

  public GridBagConstraints setGridBagC(int gx,int gy,double wx,double wy,int gFill,int gAnchor){
        GridBagConstraints c = new GridBagConstraints();
        c.fill=gFill;
        c.anchor=gAnchor;
        c.gridx=gx;
        c.gridy=gy; 
        c.weightx=wx;
        c.weighty=wy;
        return c;
}

public int initFrame(Container pane){
        setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);//Set the size of the frame.
        setResizable(false);//You're not allowed to resize the frame.   
        pane.setLayout(new GridBagLayout());    
        GridBagConstraints c;       c=setGridBagC(0,0,0,0,GridBagConstraints.HORIZONTAL,GridBagConstraints.NORTH);
        JMenu ArchJ=new JMenu("Console");
        JMenu menuTwo=new JMenu("MenuTwo");
        JMenu menuThree=new JMenu("MenuThree");
        JMenu menuFour=new JMenu("MenuFour");
        JMenuBar mbar=new JMenuBar();
        mbar.add(ArchJ);
        JMenuItem OneItOne=new JMenuItem("1");
        OneItOne.setPreferredSize(new Dimension(100,30));
        JMenuItem OneItTwo=new JMenuItem("2");
        OneItTwo.setSize(100, 30);
        ArchJ.add(OneItOne);
        ArchJ.addSeparator();
        ArchJ.add(OneItTwo);
        mbar.add(menuTwo);
        mbar.add(menuThree);
        mbar.add(menuFour);
        pane.add(mbar,c);
        JButton bt=new JButton("kd");
        c=setGridBagC(0,1,1.0,0,GridBagConstraints.BOTH,GridBagConstraints.NORTH);
        pane.add(bt,c);     
        //pack();//Do not use pack()
        return 1;
    }

And this is the initiation of frame:

RobotCtrlFrame frame=new RobotCtrlFrame();
frame.initFrame(frame.getContentPane());

And here is the result:

enter image description here

I don't intend to use the function pack() here. The space left at the top and buttom confuses me a lot. How can I eliminate these space? Thanks. Though using pack(); can wrap up the space.I'd like to figure out the reason of these left space.

Was it helpful?

Solution

Thanks for your code. I just want to try another way to set the MenuBar by using the Layout

OTHER TIPS

Im not great on swing myself. But have you tried changing weightx and/or weighty to 1 instead of 0. As stated in this question: SO Question Just something to try.

Try to add label with space(not empty) to the last line (for you gridy = 2) and weighty property set to 1. This trick must work

Type cast pane to JFrame and set the menu bar using setJMenuBar in JFrame class. Here is the sample program

package com.sample.ui;

import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

public class TestJFrame extends JFrame {

    private static final long serialVersionUID = 3509944903365488258L;

    public TestJFrame() {
        super();
        initFrame(this);
    }

    public GridBagConstraints setGridBagC(int gx, int gy, double wx, double wy,
            int gFill, int gAnchor) {
        GridBagConstraints c = new GridBagConstraints();
        c.fill = gFill;
        c.anchor = gAnchor;
        c.gridx = gx;
        c.gridy = gy;
        c.weightx = wx;
        c.weighty = wy;
        return c;
    }

    public int initFrame(Container pane) {
        setSize(300, 300);// Set the size of the frame.
        setResizable(false);// You're not allowed to resize the frame.
        pane.setLayout(new GridBagLayout());
        GridBagConstraints c;
        c = setGridBagC(0, 0, 0, 0, GridBagConstraints.HORIZONTAL,
                GridBagConstraints.NORTH);
        JMenu ArchJ = new JMenu("Console");
        JMenu menuTwo = new JMenu("MenuTwo");
        JMenu menuThree = new JMenu("MenuThree");
        JMenu menuFour = new JMenu("MenuFour");
        JMenuBar mbar = new JMenuBar();
        mbar.add(ArchJ);
        JMenuItem OneItOne = new JMenuItem("1");
        OneItOne.setPreferredSize(new Dimension(100, 30));
        JMenuItem OneItTwo = new JMenuItem("2");
        OneItTwo.setSize(100, 30);
        ArchJ.add(OneItOne);
        ArchJ.addSeparator();
        ArchJ.add(OneItTwo);
        mbar.add(menuTwo);
        mbar.add(menuThree);
        mbar.add(menuFour);

        JFrame jFrame = (JFrame) pane;
        jFrame.setJMenuBar(mbar);

        JButton bt = new JButton("kd");
        c = setGridBagC(0, 1, 1.0, 0, GridBagConstraints.BOTH,
                GridBagConstraints.NORTH);
        pane.add(bt, c);
        // pack();//Do not use pack()
        return 1;
    }

    public static void main(String[] args) {
        TestJFrame testJFrame = new TestJFrame();
        testJFrame.setVisible(true);
    }

}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top