es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Java Swing: Intentando centrar un botón

Estoy tratando de crear una página de inicio de sesión para una idea en la que estoy trabajando y estoy intentando centrar dos botones. Cuando obtengo las dimensiones de la pantalla y las divido por 2, no queda centrado. Aquí está mi código:

import javax.swing.*;
import java.awt.*;

public class ChatWindow extends JFrame {

public ChatWindow() {
    JFrame frame = new JFrame("EasyChat");
    JButton login = new JButton("Iniciar sesión");
    JButton signup = new JButton("¿No tienes una cuenta? Regístrate");
    JPanel mainPanel = new JPanel();
    Dimension ss = Toolkit.getDefaultToolkit().getScreenSize();

    frame.setVisible(true);
    frame.setLayout(null);
    frame.setSize(800,450);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setExtendedState(JFrame.MAXIMIZED_BOTH);

    frame.getContentPane().add(login);
    frame.getContentPane().add(signup);

    login.setPreferredSize(new Dimension(25,60));
    login.setFont(new Font("HelveticaNeue", Font.BOLD, 20));
    signup.setBounds(ss.width / 2, ss.height / 2 + 125, 200, 100);
    login.setBounds(ss.width / 2, ss.height / 2, 200, 100); 

    mainPanel.setLayout(new BorderLayout());
    mainPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
}
}

También quiero saber cómo hacer que los botones se mantengan centrados si el usuario sale del modo de pantalla completa.

Gracias.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para centrar los botones en la página de inicio de sesión, puedes utilizar los administradores de diseño disponibles en Java Swing. En lugar de utilizar un administrador de diseño nulo, puedes intentar utilizar una combinación de administradores de diseño para lograr el resultado deseado.

    Una posible solución es utilizar un JPanel con GridBagLayout como contenedor para los botones. Puedes agregar el panel al centro del panel de contenido (content pane) del JFrame. Aquí tienes un ejemplo de código:

    import javax.swing.*;
    import java.awt.*;
    
    public class ChatWindow extends JFrame {
    
        public ChatWindow() {
            JFrame frame = new JFrame("EasyChat");
            JButton login = new JButton("Iniciar sesión");
            JButton signup = new JButton("¿No tienes una cuenta? Regístrate");
            JPanel buttonPanel = new JPanel(new GridBagLayout());
    
            frame.setVisible(true);
            frame.setSize(800, 450);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
    
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridx = 0;
            gbc.gridy = 0;
            gbc.anchor = GridBagConstraints.CENTER;
            gbc.insets = new Insets(10, 10, 10, 10);
            buttonPanel.add(login, gbc);
    
            gbc.gridy = 1;
            buttonPanel.add(signup, gbc);
    
            frame.getContentPane().add(buttonPanel, BorderLayout.CENTER);
        }
    }
    

    Al utilizar GridBagLayout, los botones de inicio de sesión y registro se centrarán en el panel independientemente del tamaño de la pantalla o del tamaño de la ventana. Además, si el usuario sale del modo de pantalla completa, los botones seguirán estando centrados porque su posición es relativa al panel y no a la pantalla.

    ¡Espero que esto te ayude!

Comments are closed.