Hola a todos, intento crear una interfaz gráfica de usuario para una sesión de chat. Logré colocar todos los componentes en el orden correcto. El único problema es que el Marco no responde, cada vez que trato de cambiar el tamaño de la ventana el componente permanece con la misma dimensión, también cuando escribo texto en el JtextArea, el borde se agranda tomando el control de cualquier otro componente en el marco. Intenté usar JScrollPane o establecer la dimensión máxima pero no funciona. Alguien puede ayudarme. Este es mi codigo.

import java.awt.*;

import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.text.DefaultCaret;

public class ClientGUI extends JPanel {

    public ClientGUI() {
        Dimension size = getPreferredSize();
        size.width = 500;
        setPreferredSize(size);
        setBorder(BorderFactory.createTitledBorder("Peron"));

        GridBagConstraints gbc = new GridBagConstraints();
        JTextArea chat, list;
        JTextField wm;
        JButton sm, sf, pm, lo;
        JFrame fr = new JFrame("FRAME");
        fr.setVisible(true);
        fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fr.setSize(200, 200);
        fr.setMinimumSize(new Dimension(1400, 1000));
        JPanel panel = new JPanel(new GridBagLayout());
        fr.add(panel);

        gbc.insets = new Insets(40, 40, 40, 40);
        chat = new JTextArea("Welcome to the chat room");
        // chat.setEditable(false);
        JScrollPane scroll = new JScrollPane(chat); // place the JTextArea in a
                                                    // scroll pane
        panel.add(scroll);
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.gridwidth = 5;
        gbc.gridheight = 7;
        // gbc.gridwidth = java.awt.GridBagConstraints.RELATIVE;
        gbc.gridx = 0;
        gbc.gridy = 1;
        gbc.ipady = 400;
        gbc.ipadx = 200;
        panel.add(chat, gbc);

        wm = new JTextField("Insert message", 10);
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.gridwidth = 1;
        gbc.gridheight = 2;
        gbc.ipady = 150;
        gbc.ipadx = 300;
        gbc.gridx = 0;
        gbc.gridy = 10;
        panel.add(wm, gbc);

        list = new JTextArea("User online");

        gbc.gridx = 5;
        gbc.gridy = 2;
        gbc.ipady = 400;
        gbc.ipadx = 300;
        panel.add(list, gbc);

        sm = new JButton("Send");
        gbc.gridheight = 1;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.gridx = 3;
        gbc.gridy = 10;
        gbc.ipady = 20;
        gbc.ipadx = 200;
        panel.add(sm, gbc);

        pm = new JButton("Private message");
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.gridx = 4;
        gbc.gridy = 10;
        gbc.ipady = 20;
        gbc.ipadx = 20;
        panel.add(pm, gbc);

        lo = new JButton("LOGOUT");
        gbc.gridx = 5;
        gbc.gridy = 1;
        gbc.ipady = 20;
        panel.add(lo, gbc);

        sf = new JButton("Send File");
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.gridx = 5;
        gbc.gridy = 10;
        gbc.ipady = 20;
        gbc.ipadx = 20;
        panel.add(sf, gbc);

    }

}
0
Werokk 14 dic. 2016 a las 18:41

1 respuesta

La mejor respuesta

Tu problema con el área de texto es donde pones panel.add(scroll). Elimina esta línea. Además, debe agregar el panel de desplazamiento y no el área de texto al panel. Cambie panel.add(chat,gbc) a panel.add(scroll,gbc)

2
KyleKW 14 dic. 2016 a las 18:50
¿Sabe cómo hacer que el componente responda cuando el usuario cambia el tamaño de la ventana?
 – 
Werokk
14 dic. 2016 a las 18:55
¿Puedes aclarar lo que quieres decir? Me pareció notar que el marco también actuaba de manera extraña. Elimino las dos líneas de fr.setMinimumSize() y fr.setSize() y agregué fr.pack() al final del código. Sugeriría encarecidamente reestructurar el código para separar la configuración del panel y el marco para facilitar la resolución de problemas.
 – 
KyleKW
14 dic. 2016 a las 18:59
@Werokk, Thank you so much, it worked! - entonces no falsifique "aceptar" la respuesta haciendo clic en la marca de verificación para que la gente sepa que el problema se ha resuelto.
 – 
camickr
14 dic. 2016 a las 19:06
Tuve que fr.setMinimumSize (); porque en esa dimensión los componentes están alineados correctamente, pero si hago la ventana más pequeña puedo ver solo algunos de los componentes porque los componentes no cambian de dimensión
 – 
Werokk
14 dic. 2016 a las 19:12
Es posible que desee echar un vistazo a este
 – 
KyleKW
14 dic. 2016 a las 19:16