user1750369
user1750369

Reputation:

How do I divide windows in using Swing?

I am writing a program in Java and I'm learning Swing as I go, but I seem to be at a roadblock. I have attached a sketch to explain what I'm trying to do, and hopefully you can help me understand what to do.

+===============================================================================+
|File Edit View Help                                                            |
+================================================================================
|          |                                                                    |
|          |                                                                    |
|Content 1 |                Content 2                                           |
|          |                                                                    |
|          |                                                                    |
+===============================================================================+

I am using JFrames and JPanels to construct this program, but I cannot understand how to make the two frames for the content. Also, I want the left column to always be 150px wide, and the entire height of the frame, while the right should always fill the remaining width of the window.

package mycookbook;

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;

public class MyCookBook extends JFrame implements ActionListener {

private static final long serialVersionUID = 1L;

public static void main(String[] args) {

    new MyCookBook();

}

public MyCookBook() {

    super("My Cook Book vers. 0.0.0.1");
    setSize(1920, 1030);
    setResizable(false);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    setVisible(true);

    setMenu();
    setWindows();

}

public void setMenu() {

    //Setting up the menubar.
    JMenuBar menubar = new JMenuBar();

    //Adding the menu bar.
    setJMenuBar(menubar);

    //Setting up the file menu.
    JMenu fileMenu = new JMenu("File");
    fileMenu.setMnemonic(KeyEvent.VK_F);

    JMenu nwFile = new JMenu("New >>");
    JMenuItem cbNwFile = new JMenuItem("Cookbook");
    JMenuItem chNwFile = new JMenuItem("Chapter");
    JMenuItem rcNwFile = new JMenuItem("Recipe");
    JMenu opFile = new JMenu("Open >>");
    JMenuItem cbOpFile = new JMenuItem("Cookbook");
    JMenuItem chOpFile = new JMenuItem("Chapter");
    JMenuItem rcOpFile = new JMenuItem("Recipe");
    JMenuItem svFile = new JMenuItem("Save");
    JMenuItem ipFile = new JMenuItem("Import");
    JMenuItem epFile = new JMenuItem("Export");
    JMenuItem pnFile = new JMenuItem("Print");
    JMenuItem upFile = new JMenuItem("Update");
    JMenuItem prFile = new JMenuItem("Properties");
    JMenuItem exFile = new JMenuItem("Exit");

    //Adding all the file menu and its contents to the menubar.
    menubar.add(fileMenu);
    fileMenu.add(nwFile);
    nwFile.add(cbNwFile);
    nwFile.add(chNwFile);
    nwFile.add(rcNwFile);
    fileMenu.add(opFile);
    opFile.add(cbOpFile);
    opFile.add(chOpFile);
    opFile.add(rcOpFile);
    fileMenu.addSeparator();
    fileMenu.add(svFile);
    fileMenu.add(ipFile);
    fileMenu.add(epFile);
    fileMenu.add(pnFile);
    fileMenu.addSeparator();
    fileMenu.add(upFile);
    fileMenu.add(prFile);
    fileMenu.addSeparator();

    fileMenu.add(exFile);

    exFile.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {

            System.exit(0);

        }

    });


    //Setting up the edit menu.
    JMenu editMenu = new JMenu("Edit");
    editMenu.setMnemonic(KeyEvent.VK_E);

    JMenuItem cbEdit =  new JMenuItem("Cookbook");
    JMenuItem chEdit =  new JMenuItem("Chapter");
    JMenuItem rcEdit =  new JMenuItem("Recipe");
    menubar.add(editMenu);
    editMenu.add(cbEdit);
    editMenu.add(chEdit);
    editMenu.add(rcEdit);

    //Setting up the view menu.
    JMenu viewMenu = new JMenu("View");
    viewMenu.setMnemonic(KeyEvent.VK_V);

    JMenu mdView = new JMenu("Mode >>");
    JMenuItem pnView = new JMenuItem("Panel View");
    JMenuItem pgView = new JMenuItem("Page View");
    JMenuItem lsView = new JMenuItem("List View");

    JMenu rsView = new JMenu("Resolution >>");
    JMenuItem smRes = new JMenuItem("1024x718");
    JMenuItem mdRes = new JMenuItem("1440x910");
    JMenuItem lgRes = new JMenuItem("1920x1030");



    menubar.add(viewMenu);
    viewMenu.add(mdView);
    viewMenu.add(rsView);
    mdView.add(pnView);
    mdView.add(pgView);
    mdView.add(lsView);
    rsView.add(smRes);
    rsView.add(mdRes);
    rsView.add(lgRes);

    smRes.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {

            setSize(1024,718);
            setLocationRelativeTo(null);

        }

    });

    mdRes.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {

            setSize(1440,910);
            setLocationRelativeTo(null);

        }

    });

    lgRes.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {

            setSize(1920,1030);
            setLocationRelativeTo(null);

        }

    });

    exFile.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                System.exit(0);

            }

    });

    //Setting up the help menu.
    JMenu helpMenu = new JMenu("Help");
    helpMenu.setMnemonic(KeyEvent.VK_H);

    JMenuItem hpHelp = new JMenuItem("My Cookbook Help");
    JMenuItem abHelp = new JMenuItem("About My Cookbook");
    menubar.add(helpMenu);
    helpMenu.add(hpHelp);
    helpMenu.add(abHelp);

    revalidate();

}

public void setWindows() {

    JScrollPane bookPane = new JScrollPane();       
    JScrollPane recPane = new JScrollPane();        
    JSplitPane content = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,bookPane, recPane);
    Dimension bpDim = new Dimension(150, 400);
    Dimension rpDim = new Dimension(650, 400);
    bookPane.setMinimumSize(bpDim);
    recPane.setMinimumSize(rpDim);

    add(content);

}

@Override
public void actionPerformed(ActionEvent arg0) {
    // TODO Auto-generated method stub

}

}

Upvotes: 1

Views: 1455

Answers (2)

camickr
camickr

Reputation: 324137

Read the section from the Swing tutorial on How to Use Border Layout.

One component goes to BorderLayout.LINE_START the other to BorderLayout.CENTER.

Also, I want the left column to always be 150px wide

The width is determined by the preferred size of the component added to that area of the BorderLayout.

Upvotes: 2

Tdorno
Tdorno

Reputation: 1571

You can simply solve this problem by using a different layout for your GUI. I recommend you check out the GridBagLayout as this layout is highly customizible.

We can modify our GridBagLayout by supplying it with GridBagConstraints once you've learned how to modify your GridBagLayout using GridBagConstraints your problem will be extremely simple to solve.

You asked how to divide windows, simple just make three JPanels and put two of thoseJPanels in the main JPanel that will be displayed at the highest level.

Upvotes: 0

Related Questions