1

I have a problem with my java interface, I want to display a menubar and toolbar together with some labels and textfields, however every time I use the gridbaglayout it didn't display my label as well as my textfield it only display my menubar and toolbar can you help me out with this one, I search Mr.G(google) about this problem but can't find a decent solution with my problems, I'm only newbie on java and I want java as my programming language to used in my next project.

Here are my Code:

    package Forms;
import javax.swing.*;
import java.awt.*;
public class CompleteGridLayout {
    static JFrame frame;
    static JPanel panel, panelData;
    static JMenuBar menuBar;
    static JMenu menuFile, menuSetting, menuOption;
    static JMenuItem itemNew, itemOpen, itemSave, itemPrint, itemOption, itemClose, itemView, itemReports;
    static JToolBar toolBar;
    static Icon iconMenu;
    static JButton barSave, barEdit, barClear, barDelete;
    static ButtonGroup group;
    static JRadioButtonMenuItem subFont1, subFont2, subFont3, subFont4, subFont5;
    static JCheckBoxMenuItem checkPrefer;
    static JLabel label;
    static JTextField textFirst, textMiddle, textLast;
    static JCheckBox checkGender;

    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable(){
            public void run()
            {
                gui();
            }
        });
    }
    public static void gui()
    {

        frame = new JFrame("Complete GridBag Layout Interface");
        //frame.setResizable(false);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 300);

        panel = new JPanel();
        panel.setLayout(new GridBagLayout());
        frame.getContentPane().add(panel);
        CompleteGridLayout myMenu = new CompleteGridLayout();
        myMenu.MyMenuBar();
        myMenu.MyToolBar();

        GridBagConstraints bag = new GridBagConstraints();
        bag.anchor = GridBagConstraints.CENTER;
        bag.gridx = 0;
        bag.gridy = 3;
        panel.add(dataPanel(), bag);


        frame.pack();
        frame.setVisible(true);
    }

    public static JPanel dataPanel()
    {

        panelData = new JPanel();
        label = new JLabel("First Name: ");
        textFirst = new JTextField(10);
        panelData.setLayout(new GridBagLayout());
        GridBagConstraints bagData = new GridBagConstraints();
        int i = 0;
        bagData.gridx = 1;
        bagData.gridy = i;
        bagData.gridwidth = 2;
        bagData.fill = GridBagConstraints.HORIZONTAL;
        panelData.add(textFirst, bagData);

        bagData.gridx = 0;
        bagData.gridy = i;
        bagData.gridwidth = 1;
        bagData.fill = GridBagConstraints.NONE;
        panelData.add(label, bagData);
        i++;
        return panelData;
    }

    public void MyToolBar()
    {   

        toolBar = new JToolBar(JToolBar.HORIZONTAL);
        frame.add(toolBar);


        iconMenu = new ImageIcon(getClass().getResource("icons/save-bar.png"));
        barSave = new JButton("Save", iconMenu);
        toolBar.add(barSave);

        iconMenu = new ImageIcon(getClass().getResource("icons/edit-bar.png"));
        barEdit = new JButton("Edit", iconMenu);
        toolBar.add(barEdit);

        iconMenu = new ImageIcon(getClass().getResource("icons/clear-bar.png"));
        barClear = new JButton("Clear", iconMenu);
        toolBar.add(barClear);

        iconMenu = new ImageIcon(getClass().getResource("icons/delete-bar.png"));
        barDelete = new JButton("Delete", iconMenu);
        toolBar.add(barDelete);
    }
    public void MyMenuBar()
    {
        menuBar = new JMenuBar();
        frame.setJMenuBar(menuBar);

        //Menus
        menuFile = new JMenu("File");
        menuBar.add(menuFile);

        iconMenu = new ImageIcon(getClass().getResource("icons/new.png"));
        itemNew = new JMenuItem("New", iconMenu);
        menuFile.add(itemNew);

        iconMenu = new ImageIcon(getClass().getResource("icons/open.png"));
        itemOpen = new JMenuItem("Open", iconMenu);
        menuFile.add(itemOpen);

        iconMenu = new ImageIcon(getClass().getResource("icons/save.png"));
        itemSave = new JMenuItem("Save", iconMenu);
        menuFile.add(itemSave);

        menuFile.addSeparator();

        iconMenu = new ImageIcon(getClass().getResource("icons/print.png"));
        itemPrint = new JMenuItem("Print", iconMenu);
        menuFile.add(itemPrint);
        menuFile.addSeparator();

        menuSetting = new JMenu("Settings");
        menuFile.add(menuSetting);
        group = new ButtonGroup();

        subFont1 = new JRadioButtonMenuItem("10 Pixel");
        menuSetting.add(subFont1);
        group.add(subFont1);

        subFont2 = new JRadioButtonMenuItem("12 Pixel");
        menuSetting.add(subFont2);
        group.add(subFont2);

        subFont3 = new JRadioButtonMenuItem("14 Pixel");
        menuSetting.add(subFont3);
        group.add(subFont3);

        subFont4 = new JRadioButtonMenuItem("16 Pixel");
        menuSetting.add(subFont4);
        group.add(subFont4);

        subFont5 = new JRadioButtonMenuItem("24 Pixel");
        menuSetting.add(subFont5);
        group.add(subFont5);
        menuSetting.addSeparator();

        checkPrefer = new JCheckBoxMenuItem("Preference");
        menuSetting.add(checkPrefer);
        group.add(checkPrefer);

        iconMenu = new ImageIcon(getClass().getResource("icons/close.png"));
        itemClose = new JMenuItem("Close", iconMenu);
        menuFile.add(itemClose);

        menuOption = new JMenu("Option");
        menuBar.add(menuOption);

        iconMenu = new ImageIcon(getClass().getResource("icons/view.png"));
        itemView = new JMenuItem("View Users", iconMenu);
        menuOption.add(itemView);

        iconMenu = new ImageIcon(getClass().getResource("icons/report.png"));
        itemReports = new JMenuItem("Reports", iconMenu);
        menuOption.add(itemReports);
    }
}

By the way i only used one label and textfield for testing purposes only.

Zyrax
  • 171
  • 2
  • 7
  • 16
  • *"i have a problem with my java interface,"* The shift key seems to have a problem as well. If not, please use it at the start of every sentence, for the word 'I' and class names etc. Doing so makes text easier to read. You would not want to make it *harder* for us to help, right? – Andrew Thompson Aug 28 '12 at 04:24
  • Sorry, for the grammar I always forgot to capitalized every first letter. – Zyrax Aug 28 '12 at 04:29
  • 1
    You can make your example self-contained using icons from the `UIManager`, as shown [here](http://stackoverflow.com/a/7935040/230513). – trashgod Aug 28 '12 at 04:37
  • I've tried, but I can't make heads nor tails of your code. I only hope this is an example and not your actually production code. Get rid of the static references and create a self contained frame (a class that extends from JFrame) and try again... – MadProgrammer Aug 28 '12 at 04:52
  • Tnx for the help I already fix my problem... the toolbar is just hiding the textfields and the label my mistake... – Zyrax Aug 28 '12 at 04:53
  • +1 The example was neither short nor complete, but it compiled! – trashgod Aug 28 '12 at 05:01

2 Answers2

2

You can also use the frame's default BorderLayout, as shown below.

As @Mad comments, consider re-factoring your code to reduce the proliferation of instance variables.

image

import java.awt.*;
import javax.swing.*;

public class CompleteGridLayout {

    static JFrame frame;
    static JPanel panel, panelData;
    static JMenuBar menuBar;
    static JMenu menuFile, menuSetting, menuOption;
    static JMenuItem itemNew, itemOpen, itemSave, itemPrint, itemOption, itemClose, itemView, itemReports;
    static JToolBar toolBar;
    static Icon iconMenu = UIManager.getIcon("html.pendingImage");
    static JButton barSave, barEdit, barClear, barDelete;
    static ButtonGroup group;
    static JRadioButtonMenuItem subFont1, subFont2, subFont3, subFont4, subFont5;
    static JCheckBoxMenuItem checkPrefer;
    static JLabel label;
    static JTextField textFirst, textMiddle, textLast;
    static JCheckBox checkGender;

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                gui();
            }
        });
    }

    public static void gui() {

        frame = new JFrame("Complete GridBag Layout Interface");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 300);

        CompleteGridLayout myMenu = new CompleteGridLayout();
        myMenu.myMenuBar();
        myMenu.myToolBar();
        frame.setJMenuBar(menuBar);
        frame.add(dataPanel(), BorderLayout.CENTER);
        frame.add(toolBar, BorderLayout.SOUTH);

        frame.pack();
        frame.setVisible(true);
    }

    public static JPanel dataPanel() {

        panelData = new JPanel();
        label = new JLabel("First Name: ");
        textFirst = new JTextField(10);
        panelData.setLayout(new GridBagLayout());
        GridBagConstraints bagData = new GridBagConstraints();
        int i = 0;
        bagData.gridx = 1;
        bagData.gridy = i;
        bagData.gridwidth = 2;
        bagData.fill = GridBagConstraints.HORIZONTAL;
        panelData.add(textFirst, bagData);

        bagData.gridx = 0;
        bagData.gridy = i;
        bagData.gridwidth = 1;
        bagData.fill = GridBagConstraints.NONE;
        panelData.add(label, bagData);
        i++;
        return panelData;
    }

    public void myToolBar() {

        toolBar = new JToolBar(JToolBar.HORIZONTAL);
        frame.add(toolBar);


        barSave = new JButton("Save", iconMenu);
        toolBar.add(barSave);

        barEdit = new JButton("Edit", iconMenu);
        toolBar.add(barEdit);

        barClear = new JButton("Clear", iconMenu);
        toolBar.add(barClear);

        barDelete = new JButton("Delete", iconMenu);
        toolBar.add(barDelete);
    }

    public void myMenuBar() {
        menuBar = new JMenuBar();
        frame.setJMenuBar(menuBar);

        //Menus
        menuFile = new JMenu("File");
        menuBar.add(menuFile);

        itemNew = new JMenuItem("New", iconMenu);
        menuFile.add(itemNew);

        itemOpen = new JMenuItem("Open", iconMenu);
        menuFile.add(itemOpen);

        itemSave = new JMenuItem("Save", iconMenu);
        menuFile.add(itemSave);

        menuFile.addSeparator();

        itemPrint = new JMenuItem("Print", iconMenu);
        menuFile.add(itemPrint);
        menuFile.addSeparator();

        menuSetting = new JMenu("Settings");
        menuFile.add(menuSetting);
        group = new ButtonGroup();

        subFont1 = new JRadioButtonMenuItem("10 Pixel");
        menuSetting.add(subFont1);
        group.add(subFont1);

        subFont2 = new JRadioButtonMenuItem("12 Pixel");
        menuSetting.add(subFont2);
        group.add(subFont2);

        subFont3 = new JRadioButtonMenuItem("14 Pixel");
        menuSetting.add(subFont3);
        group.add(subFont3);

        subFont4 = new JRadioButtonMenuItem("16 Pixel");
        menuSetting.add(subFont4);
        group.add(subFont4);

        subFont5 = new JRadioButtonMenuItem("24 Pixel");
        menuSetting.add(subFont5);
        group.add(subFont5);
        menuSetting.addSeparator();

        checkPrefer = new JCheckBoxMenuItem("Preference");
        menuSetting.add(checkPrefer);
        group.add(checkPrefer);

        itemClose = new JMenuItem("Close", iconMenu);
        menuFile.add(itemClose);

        menuOption = new JMenu("Option");
        menuBar.add(menuOption);

        itemView = new JMenuItem("View Users", iconMenu);
        menuOption.add(itemView);

        itemReports = new JMenuItem("Reports", iconMenu);
        menuOption.add(itemReports);
    }
}
trashgod
  • 203,806
  • 29
  • 246
  • 1,045
1

Okay, I've reworked you code so it makes sense (to me at least)...

panel = new JPanel();
panel.setLayout(new GridBagLayout());
getContentPane().add(panel);
createMenuBar();
// Your problem is here.  This will add the toolbar to the contentPane, 
// removing the "panel" that you previously added...
createToolBar();

GridBagConstraints bag = new GridBagConstraints();
bag.anchor = GridBagConstraints.CENTER;
bag.gridx = 0;
bag.gridy = 3;
panel.add(dataPanel(), bag);

This is the toolbar

public void createToolBar() {
    toolBar = new JToolBar(JToolBar.HORIZONTAL);
    add(toolBar); // This works like getContentPane().add(toolBar);
MadProgrammer
  • 343,457
  • 22
  • 230
  • 366
  • yes, because I thought that JToolbar is like a JMenubar it has it's own content pane which is I think "glass content pane" if I am not mistaken but i was wrong I still need to create another panel for my JToolBar. by the way thx for the help. – Zyrax Aug 28 '12 at 05:07