Схема расположения сетки с панелью инструментов и панелью меню
У меня проблема с интерфейсом Java, я хочу отобразить строку меню и панель инструментов вместе с некоторыми надписями и текстовыми полями, однако каждый раз, когда я использую gridbaglayout, он не отображал мою метку, а мое текстовое поле отображал только мою строку меню и панель инструментов Можете ли вы помочь мне с этим, я ищу Mr.G(Google) об этой проблеме, но не могу найти достойного решения с моими проблемами, я только новичок на 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);
}
}
Кстати, я использовал только одну метку и текстовое поле только для целей тестирования.
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);
}
}
Хорошо, я переработал ваш код, чтобы он имел смысл (по крайней мере для меня)...
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);