1

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

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

4

2 回答 2

2

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

正如@Mad 评论,考虑重构您的代码以减少实例变量的扩散。

图片

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);
    }
}
于 2012-08-28T04:56:14.017 回答
1

好的,我已经修改了你的代码,所以它是有意义的(至少对我来说)......

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

这是工具栏

public void createToolBar() {
    toolBar = new JToolBar(JToolBar.HORIZONTAL);
    add(toolBar); // This works like getContentPane().add(toolBar);
于 2012-08-28T05:02:54.103 回答