java - 带工具栏和菜单栏的网格包布局

标签 java swing gridbaglayout jmenubar jtoolbar

我的 java 界面有问题,我想显示一个菜单栏和工具栏以及一些标签和文本字段,但是每次我使用 gridbaglayout 它都没有显示我的标签和我的文本字段,它只显示我的菜单栏和工具栏你能帮我解决这个问题吗,我在 Mr.G(google) 上搜索了这个问题,但找不到解决我问题的合适方法,我只是 java 的新手,我想将 java 作为我的编程语言用于我的下一个项目。

这是我的代码:

    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);
    }
}

顺便说一句,我只使用了一个标签和文本字段,仅用于测试目的。

最佳答案

您还可以使用框架的默认 BorderLayout,如下所示。

正如@Mad 评论的那样,考虑重构您的代码以减少 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);
    }
}

关于java - 带工具栏和菜单栏的网格包布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12152728/

相关文章:

java - 阴影/重新打包的 jar 作为依赖项

java - IntelliJ不会从Gradle中获取compileOnly依赖项

java - 我的 JPanel 拒绝聚焦

java - 如何在另一个 JPanel 之上创建精确的 JPanel 镜像

java - 隐式调用方法

java - 如何防止在JSP页面或HTML中删除当前登录用户

Netbeans 中的 java @action 方法参数

java - 为 swingworker 添加超时功能

java - GridBagLayout 中的对齐方式(小程序)

java - 需要帮助修复与 GUI 的对齐问题