Макет сетки с панелью инструментов и панелью меню

У меня проблема с моим интерфейсом 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);
    }
}

Кстати, я использовал только одну метку и текстовое поле только для целей тестирования.


person Zyrax    schedule 28.08.2012    source источник
comment
у меня проблема с интерфейсом Java, похоже, проблема с клавишей Shift. Если нет, используйте его в начале каждого предложения, для слова «я», названий классов и т. д. Это облегчит чтение текста. Вы же не хотите, чтобы нам было труднее помочь, верно?   -  person Andrew Thompson    schedule 28.08.2012
comment
Извините, из-за грамматики я всегда забывал делать заглавными каждую первую букву.   -  person Zyrax    schedule 28.08.2012
comment
Вы можете сделать свой пример автономным, используя значки из UIManager, как показано здесь.   -  person trashgod    schedule 28.08.2012
comment
Я пытался, но я не могу понять ваш код. Я только надеюсь, что это пример, а не ваш реальный производственный код. Избавьтесь от статических ссылок и создайте автономный фрейм (класс, который расширяется от JFrame) и повторите попытку...   -  person MadProgrammer    schedule 28.08.2012
comment
Tnx за помощь, я уже исправил свою проблему... панель инструментов просто скрывает текстовые поля и ярлык, моя ошибка...   -  person Zyrax    schedule 28.08.2012
comment
+1 Пример не был ни коротким, ни полным, но он скомпилировался!   -  person trashgod    schedule 28.08.2012


Ответы (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);
    }
}
person trashgod    schedule 28.08.2012

Хорошо, я переработал ваш код, чтобы он имел смысл (по крайней мере, для меня)...

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);
person MadProgrammer    schedule 28.08.2012
comment
да, потому что я думал, что JToolbar похож на JMenubar, у него есть собственная панель содержимого, которая, я думаю, является стеклянной панелью содержимого, если я не ошибаюсь, но я ошибался, мне все еще нужно создать другую панель для моего JToolBar. кстати спасибо за помощь. - person Zyrax; 28.08.2012