Domanda

Ho un pannello che viene utilizzato come parte del layout della carta.Il pannello utilizza GridBagLayout.Aggiungo due componenti: JTextArea con riempimento impostato su ENTRAMBI e JTextField con riempimento impostato su orizzontale.Stanno occupando solo lo spazio orizzontale.

        // Chat card setup
        JPanel chatCard = new JPanel(new GridBagLayout());
        gc = new GridBagConstraints();

        gc.gridx = 0;
        gc.gridy = 0;
        gc.fill = GridBagConstraints.BOTH;
        gc.weightx = 2;
        chatArea = new JTextArea();
        chatCard.add(chatArea,gc);

        gc.gridx = 0;
        gc.gridy = 1;
        gc.fill = GridBagConstraints.HORIZONTAL;
        gc.anchor = GridBagConstraints.PAGE_END;
        gc.weightx = 2;
        JTextField msgField = new JTextField();
        msgField.setActionCommand("SendText");
        msgField.addActionListener(listener);
        chatCard.add(msgField, gc);

Attualmente sembra così

Panel with GridBagLayout

È stato utile?

Soluzione

Prova con gc.weighty

     ...
    gc.weightx = 2;
    gc.weighty=1;
    chatArea = new JTextArea();

    ...
    JScrollPane scrollPane=new JScrollPane(chatArea);
    chatCard.add(scrollPane,gc);
    ...

    ...
    gc.weightx = 2;
    gc.weighty=0;
    JTextField msgField = new JTextField();
    ...

Aggiungere JTextArea In JScrollPane altrimenti otterrai un risultato inaspettato quando le righe saranno più grandi della sua altezza.

utilizzo gc.insets=new Insets(5, 5, 5, 5); se vuoi un po' di spazio in alto/sinistra/basso/destra.

Istantanea:

enter image description here

Altri suggerimenti

@Braj ha la risposta per GridBagLayout: usa il vincolo pesante e 1+ alla sua risposta, ma penso che la tua configurazione sarebbe molto migliore se utilizzassi un BorderLayout, posizionassi la tua JTextArea in un JScrollPane, posizionassi JScrollPane BorderLayout. CENTER e JTextField BorderLayout.SOUTH (noto anche come BorderLayout.PAGE_END).

  JPanel chatCard = new JPanel(new BorderLayout(5, 5));
  int rows = 20;
  int cols = 40;
  JTextArea chatArea = new JTextArea(rows, cols);
  chatCard.add(new JScrollPane(chatArea), BorderLayout.CENTER);

  JTextField msgField = new JTextField(cols);
  msgField.setActionCommand("SendText");
  // msgField.addActionListener(listener);
  chatCard.add(msgField, BorderLayout.PAGE_END);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top