1

我正在用 Java 编写一个程序,并且我正在学习 Swing,但我似乎遇到了障碍。我附上了一张草图来解释我正在尝试做什么,希望你能帮助我理解该怎么做。

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

我正在使用JFrames 和JPanels 来构建这个程序,但我不明白如何为内容制作两个框架。另外,我希望左列始终为 150px 宽,以及框架的整个高度,而右列应始终填充窗口的剩余宽度。

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

}

}
4

2 回答 2

2

阅读 Swing 教程中有关如何使用边框布局的部分。

一个组件转到另一个BorderLayout.LINE_START组件BorderLayout.CENTER

另外,我希望左列始终为 150px 宽

宽度由添加到 BorderLayout 的该区域的组件的首选大小确定。

于 2013-10-27T01:50:26.657 回答
0

您可以通过为您的 GUI 使用不同的布局来简单地解决此问题。我建议您检查一下,GridBagLayout因为这种布局是高度可定制的。

一旦您学会了如何修改您的问题,我们可以GridBagLayout通过提供它来修改我们的问题,您的问题将非常容易解决。GridBagConstraintsGridBagLayoutGridBagConstraints

您问如何划分窗口,简单的只需制作三个JPanels并将其中两个放在将显示在最高级别JPanels的主窗口中。JPanel

于 2013-10-27T01:49:24.527 回答