Я создаю графический интерфейс, который должен иметь кнопки вверху, экран просмотра в середине и внизу, область с метками и полями ввода текста, которые меняются в зависимости от того, какая кнопка нажата.Основная панель, на которой все лежит, - это GridBagLayout.Панель, которая содержит поля ввода текста, является CardLayout.Я чувствую, как будто я установил GridBagConstraints и все остальное, как это должно быть, но ничего не получается, как ожидалось.Я предполагаю, что есть проблема с тем, как я установил GridBagConstraints, или, возможно, проблема с размером, но я не уверен.Я включу изображение того, что я получу при запуске, и что я пытаюсь получить.
код:
import java.awt.CardLayout;
import java.awt.Component;
import java.awt.Container;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.text.JTextComponent;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import java.awt.GridBagLayout;
import java.util.concurrent.Executors;
import java.awt.CardLayout;
import java.awt.GridBagConstraints;
import javax.swing.JLabel;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Dimension;
import java.awt.Insets;
public class Window extends JFrame {
public Window() {
Container panel = this.getContentPane();
panel.setLayout(new GridBagLayout());
panel.setSize(1000,1000);
GridBagConstraints gbc = new GridBagConstraints();
JButton ordersButton = new JButton("Orders");
gbc.gridx = 0;
gbc.gridy = 0;
panel.add(ordersButton, gbc);
JButton dishesButton = new JButton("Dishes");
gbc.gridx = 1;
gbc.gridy = 0;
panel.add(dishesButton, gbc);
JButton ingredientsButton = new JButton("Ingredients");
gbc.gridx = 2;
gbc.gridy = 0;
panel.add(ingredientsButton, gbc);
JButton suppliersButton = new JButton("Suppliers");
gbc.gridx = 3;
gbc.gridy = 0;
panel.add(suppliersButton, gbc);
JButton staffButton = new JButton("Staff");
gbc.gridx = 4;
gbc.gridy = 0;
panel.add(staffButton, gbc);
JButton dronesButton = new JButton("Drones");
gbc.gridx = 5;
gbc.gridy = 0;
panel.add(dronesButton, gbc);
JButton usersButton = new JButton("Users");
gbc.gridx = 6;
gbc.gridy = 0;
panel.add(usersButton, gbc);
JButton postcodesButton = new JButton("Postcodes");
gbc.gridx = 7;
gbc.gridy = 0;
panel.add(postcodesButton, gbc);
JButton configurationButton = new JButton("Configuration");
gbc.gridx = 8;
gbc.gridy = 0;
panel.add(configurationButton, gbc);
JTextField viewScreen = new JTextField();
gbc.gridy = GridBagConstraints.RELATIVE;
gbc.gridwidth = 9;
gbc.gridheight = 2;
viewScreen.setPreferredSize(new Dimension(650, 200));
panel.add(viewScreen, gbc);
JPanel ordersPanel = new JPanel();
JPanel dishesPanel = new JPanel();
ordersPanel.setLayout(new GridBagLayout());
dishesPanel.setLayout(new GridBagLayout());
ordersPanel.setSize(new Dimension(900, 500));
dishesPanel.setSize(new Dimension(900, 500));
JLabel orders1Label = new JLabel("order 1");
gbc.gridx = 0;
gbc.gridy = 0;
ordersPanel.add(orders1Label, gbc);
JLabel orders2Label = new JLabel("order 2");
gbc.gridx = 0;
gbc.gridy = 1;
ordersPanel.add(orders2Label, gbc);
JLabel dishes1Label = new JLabel("dish 1");
gbc.gridx = 0;
gbc.gridy = 0;
dishesPanel.add(dishes1Label, gbc);
JLabel dishes2Label = new JLabel("dish 2");
gbc.gridx = 0;
gbc.gridy = 1;
dishesPanel.add(dishes2Label, gbc);
JTextField orders1TextField = new JTextField();
gbc.gridx = 1;
gbc.gridy = 0;
gbc.weightx = 1;
gbc.gridwidth = 4;
ordersPanel.add(orders1TextField, gbc);
JTextField orders2TextField = new JTextField();
gbc.gridx = 1;
gbc.gridy = 1;
gbc.weightx = 1;
gbc.weighty = 1;
gbc.gridwidth = 4;
ordersPanel.add(orders2TextField, gbc);
JTextField dishes1TextField = new JTextField();
gbc.gridx = 1;
gbc.gridy = 0;
gbc.weightx = 1;
gbc.gridwidth = 4;
dishesPanel.add(dishes1TextField, gbc);
JTextField dishes2TextField = new JTextField();
gbc.gridx = 1;
gbc.gridy = 1;
gbc.weightx = 1;
gbc.weighty = 1;
gbc.gridwidth = 4;
dishesPanel.add(dishes2TextField, gbc);
orders1TextField.setPreferredSize(new Dimension(400, 20));
orders2TextField.setPreferredSize(new Dimension(400, 20));
dishes1TextField.setPreferredSize(new Dimension(400, 20));
dishes2TextField.setPreferredSize(new Dimension(400, 20));
JPanel entryFields = new JPanel();
CardLayout c1 = new CardLayout();
entryFields.setLayout(c1);
entryFields.setSize(new Dimension(900, 600));
gbc.gridheight = 7;
gbc.gridwidth = 9;
gbc.weighty = 1;
gbc.gridy = GridBagConstraints.RELATIVE;
entryFields.add("ordersPanel",ordersPanel);
entryFields.add("dishesPanel", dishesPanel);
c1.show(entryFields, "ordersPanel");
panel.add(entryFields, gbc);
ordersButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
c1.show(entryFields, "ordersPanel");
}
});
dishesButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
c1.show(entryFields, "dishesPanel");
}
});
//Display window
setSize(800,600);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
Window win = new Window();
}
}
что появляется:
что я хочу:
Я должен добавить, что следующее изображение - то, что я получаю прежде, чем я изменю размер окна до размера экрана моего компьютера.Вы можете увидеть метку здесь, хотя вы не можете в полноразмерной версии, и они сгруппированы вместе, так что, возможно, это проблема с тем, как я устанавливаю свои веса, я просто сделал так, чтобы, по крайней мере, каждая строка и столбец имелихотя бы один компонент с весом 1.