Estoy creando una GUI que debería tener botones en la parte superior, una pantalla de visualización en el medio y, en la parte inferior, un área con etiquetas y campos de entrada de texto que cambian según el botón que se presiona. El panel principal en el que se encuentra todo es un GridBagLayout. El panel que contiene los campos de entrada de texto es CardLayout. Siento que configuré las GridBagConstraints y todo lo demás como debería ser, pero no aparece nada como se esperaba. Me imagino que hay un problema con la forma en que configuré las GridBagConstraints, o posiblemente un problema con el tamaño, pero no estoy seguro. Incluiré una imagen de lo que obtengo cuando lo ejecuto y lo que intento obtener.
el código:
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();
}
}
lo que aparece:
lo que quiero:
Debo agregar que la siguiente imagen es la que obtengo antes de cambiar el tamaño de la ventana al tamaño de la pantalla de mi computadora. Puede ver la etiqueta, aquí, aunque no puede en la versión de tamaño completo, y están agrupados, por lo que posiblemente sea un problema con la forma en que configuré mis ponderaciones, simplemente lo hice para que al menos cada fila y columna tuviera al menos un componente con una ponderación de 1.
Bueno, comencemos diciendo que cualquier modificación que realice en su GridBagConstraints
instancia persiste en cualquiera de los siguientes usos de esa instancia.
Entonces, si hace esto, gbc.gridwidth = 9
asegúrese de restablecerlo gbc.gridwidth = 1
, de lo contrario, a cada elemento agregado se le aplicará un ancho de cuadrícula de 9. Y no es necesario configurarlo gridy = 0
cada vez que agregue un botón en la misma línea, eso solo agrega líneas de código innecesarias.
Ahora acabo de limpiar su Window()
código para mostrarle un uso correcto del GridBagConstraints
y eliminé las asignaciones duplicadas. Tendrás que agregar tu ActionListeners
nuevo
public Window() {
Container panel = this.getContentPane();
panel.setLayout(new GridBagLayout());
panel.setSize(1000,1000);
GridBagConstraints gbc = new GridBagConstraints();
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.weightx = 1;
gbc.weighty = 1;
gbc.gridy = 0; // First row
JButton ordersButton = new JButton("Orders");
gbc.gridx = 0;
panel.add(ordersButton, gbc);
JButton dishesButton = new JButton("Dishes");
gbc.gridx = 1;
panel.add(dishesButton, gbc);
JButton ingredientsButton = new JButton("Ingredients");
gbc.gridx = 2;
panel.add(ingredientsButton, gbc);
JButton suppliersButton = new JButton("Suppliers");
gbc.gridx = 3;
panel.add(suppliersButton, gbc);
JButton staffButton = new JButton("Staff");
gbc.gridx = 4;
panel.add(staffButton, gbc);
JButton dronesButton = new JButton("Drones");
gbc.gridx = 5;
panel.add(dronesButton, gbc);
JButton usersButton = new JButton("Users");
gbc.gridx = 6;
panel.add(usersButton, gbc);
JButton postcodesButton = new JButton("Postcodes");
gbc.gridx = 7;
panel.add(postcodesButton, gbc);
JButton configurationButton = new JButton("Configuration");
gbc.gridx = 8;
panel.add(configurationButton, gbc);
JTextField viewScreen = new JTextField();
gbc.gridx = 0;
gbc.gridy = 1;
gbc.gridwidth = 9;
viewScreen.setPreferredSize(new Dimension(650, 200));
viewScreen.setMinimumSize(new Dimension(650, 200));
panel.add(viewScreen, gbc);
gbc.gridwidth = 1; // Reset the gridwidth
// Third row
JLabel orders1Label = new JLabel("order 1");
gbc.gridx = 1;
gbc.gridy = 2;
panel.add(orders1Label, gbc);
JLabel orders2Label = new JLabel("order 2");
gbc.gridx = 1;
gbc.gridy = 3;
panel.add(orders2Label, gbc);
JLabel dishes1Label = new JLabel("dish 1");
gbc.gridx = 1;
gbc.gridy = 4;
panel.add(dishes1Label, gbc);
JLabel dishes2Label = new JLabel("dish 2");
gbc.gridx = 1;
gbc.gridy = 5;
panel.add(dishes2Label, gbc);
gbc.gridwidth = 4; // Textfield width
JTextField orders1TextField = new JTextField();
gbc.gridx = 2;
gbc.gridy = 2;
panel.add(orders1TextField, gbc);
JTextField orders2TextField = new JTextField();
gbc.gridx = 2;
gbc.gridy = 3;
panel.add(orders2TextField, gbc);
JTextField dishes1TextField = new JTextField();
gbc.gridx = 2;
gbc.gridy = 4;
panel.add(dishes1TextField, gbc);
JTextField dishes2TextField = new JTextField();
gbc.gridx = 2;
gbc.gridy = 5;
panel.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));
//Display window
setSize(800,600);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
Y obtuve este diseño
El diseño probablemente no sea exactamente lo que quería, pero espero que pueda continuar su trabajo con este ejemplo. ;)
Tengo el siguiente script que no funcionará cuando se ejecute como un script, pero funciona cuando se ingresan exactamente los mismos comandos en la terminal: #! / bin / sh cd ~ / Desktop / Example / javac Generator ....
Soy nuevo en la codificación y estoy tratando de seguirlo junto con un video de capacitación. He seguido los pasos y no puedo leer un archivo que he guardado en la carpeta del proyecto. Cualquier ayuda será apreciada. ...
Después de pasar de OracleJDK 8 a OpenJDK 11, nuestro Tomcat 8 ya no se inicia con la siguiente excepción: Causado por: java.lang.ClassNotFoundException: org.ietf.jgss.GSSContext en java.base / ...
Estoy haciendo un IDE de programación para mi 10º estándar. proyecto. Estoy atrapado en un punto. Quiero tener resaltado de sintaxis en mi editor (al igual que en eclipse / netbeans). He usado JTextArea. ¿Alguien puede por favor ...