Hola!
Ya he probado todo lo que me has sugerido pero sigue quedando todo igual, la etiqueta y el botón pegado a su derecha
Gracias por el tutorial, fue el que utilicé ayer para enterarme 1 poco de cómo funciona un GridBagLayout y me fue muy útil :)
No se me ocurre qué más probar, te pego el código completo del método initComponents por si el fallo está en otro sitio.
Ah, y mil gracias por la ayuda!
public class ChatFrame extends JPanel {
...
public void initComponents() {
this.setSize(100, 100);
Point point = imGUI.getLocation();
this.setLocation(point.x, point.y);
firstPanel = new JPanel();
firstPanel.setBorder(BorderFactory.createEmptyBord er(0, 0, 0, 0));
firstPanel.setOpaque(false);
firstPanel.setLayout(new GridBagLayout());
GridBagConstraints constraints = new GridBagConstraints();
remoteUserLabel = new JLabel("Sesión de chat con " + contact);
remoteUserLabel.setHorizontalAlignment(AbstractBut ton.LEFT);
remoteUserLabel.setForeground(Color.black);
remoteUserLabel.setFont(new Font("Dialog", 1, 12));
remoteUserLabel.setOpaque(true);
ImageIcon icocerrar = new ImageIcon("//Web/wwwroot/Clinic/img/close.gif");
closeButton = new JButton(icocerrar);
closeButton.setPreferredSize(new Dimension(20,20));
closeButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
}
}
);
constraints.gridx = 0;
constraints.gridy = 0;
constraints.gridwidth = 1;
constraints.gridheight = 1;
constraints.weightx = 1.0;
constraints.weighty = 1.0;
constraints.fill = GridBagConstraints.NONE;
constraints.anchor=GridBagConstraints.CENTER;
firstPanel.add(remoteUserLabel,constraints);
constraints.gridx = 1;
constraints.gridy = 0;
constraints.gridwidth = 1;
constraints.gridheight = 1;
constraints.weightx = 0;
constraints.anchor=GridBagConstraints.NORTHEAST;
constraints.fill = GridBagConstraints.NONE;
firstPanel.add(closeButton,constraints);
chatTextArea = new JTextArea(11, 40);
chatTextArea.setToolTipText("Mensajes recibidos");
chatTextArea.setEditable(false);
chatTextArea.setBackground(Color.white);
chatTextArea.setLineWrap(true);
chatTextArea.setWrapStyleWord(true);
JScrollPane incomingScroller = new JScrollPane(chatTextArea);
incomingScroller.setVerticalScrollBarPolicy(JScrol lPane.
VERTICAL_SCROLLBAR_ALWAYS);
incomingScroller.setHorizontalScrollBarPolicy(JScr ollPane.
HORIZONTAL_SCROLLBAR_ALWAYS);
//EVA: Añadido para que el Scroll siempre aparezca abajo del todo
incomingScroller.getVerticalScrollBar().setValue(i ncomingScroller.
getVerticalScrollBar().getMaximum());
infoLabel = new JLabel("");
infoLabel.setHorizontalAlignment(AbstractButton.CE NTER);
infoLabel.setForeground(Color.black);
infoLabel.setFont(new Font("Dialog", 1, 10));
infoLabel.setOpaque(false);
textToSendLabel = new JLabel("Texto a enviar:");
textToSendLabel.setHorizontalAlignment(AbstractBut ton.CENTER);
textToSendLabel.setForeground(Color.black);
textToSendLabel.setFont(new Font("Dialog", 1, 11));
textToSendLabel.setOpaque(true);
messageTextArea = new JTextArea(3, 32);
messageTextArea.setEditable(true);
messageTextArea.setFont(new Font("Helvetica", Font.PLAIN, 13));
messageTextArea.setSelectedTextColor(Color.blue);
messageTextArea.setSelectionColor(Color.lightGray) ;
messageTextArea.setLineWrap(true);
messageTextArea.setWrapStyleWord(true);
// create scroll bars for text areas
JScrollPane outgoingScroller = new JScrollPane(messageTextArea);
outgoingScroller.setVerticalScrollBarPolicy(JScrol lPane.
VERTICAL_SCROLLBAR_ALWAYS);
outgoingScroller.setHorizontalScrollBarPolicy(JScr ollPane.
HORIZONTAL_SCROLLBAR_AS_NEEDED);
messageTextArea.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
messageTextAreaKeyPressed(evt);
}
});
secondPanel = new JPanel();
secondPanel.setOpaque(false);
secondPanel.setBorder(BorderFactory.createEmptyBor der(2, 2, 2, 2));
secondPanel.setLayout(new GridLayout(2, 1, 0, 0));
sendButton = new JButton(" ENVIAR ");
sendButton.setToolTipText("Enviar el mensaje");
sendButton.setFocusPainted(false);
sendButton.setFont(new Font("Dialog", 1, 13));
sendButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
chatSession.sendIMActionPerformed(evt);
}
}
);
JPanel subPanel2 = new JPanel();
subPanel2.setOpaque(false);
subPanel2.setLayout(new GridLayout(2, 1, 0, 0));
JPanel subPanel3 = new JPanel();
subPanel3.setOpaque(false);
subPanel3.setLayout(new BorderLayout());
subPanel3.add("Center", outgoingScroller);
subPanel3.add("East", sendButton);
secondPanel.add(subPanel3);
this.add("North", firstPanel);
this.add("Center", incomingScroller);
this.add("South", secondPanel);
}