Автоматическое изменение размеров компонентов на фрейме при его изменении - Java

Узнай цену своей работы

Формулировка задачи:

Добрый день. Создаю JFrame, добавляю на него JPanel, на JPanel добавляю JTextArea и JButton. Для JPanel используется BorderLayout. Помещаю ее в область South. Для JPanel используется FlowLayout manager, дабы JTextArea и JButton располагались в линию слева направо. Для JText Area заданы размеры, так что JTextArea и JButton заполняют всю область фрейма(изначально).

Вопрос

: Как сделать, чтобы JTextArea при изменении размера JFrame автоматически изменяла свои размеры, растягиваясь вместе с фреймом? Кнопка при этом не увеличивалась. Вроде как BorderLayout автоматом все это дело растягивает, но как быть с другими менеджерами, ведь при размещении на панели я использую. к примеру, FlowLayout.
вопрос актуален. Задам его по другому: Какие средства существуют в Java для растяжения компонентов размещенных во фрейме в зависимости от изменения его размеров?

Решение задачи: «Автоматическое изменение размеров компонентов на фрейме при его изменении»

textual
Листинг программы
import java.awt.*;
import java.awt.Color.*;
import java.awt.Dimension;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.Scanner;
 
//создаем графический интерфейс программы
 
public class ChatClientGui {
    private JButton disconnectButton;
    private JFrame mainFrame;
    private String[] massivUsers;
    private JTextArea chatField;
    private JTextArea messageField;
    private JList nicknameList;
    private JPanel panelEast;
    private JPanel panelSouth;
    private JPanel panelButton;
    private JScrollPane scrollListUsers;
    private JScrollPane scrollMessageField;
    private JScrollPane scrollChatField;
    private JButton sendButton;
    
    class DisconnectButton implements ActionListener{           //внутренний класс для события кнопки выхода
        public void actionPerformed(ActionEvent event){
            System.out.println("disconect from chat-server");   //заменить на код дисконекта
        }
    }
    class SendButton implements ActionListener{ //внутренний класс для события кнопки отправки сообщения
        public void actionPerformed(ActionEvent event){
            System.out.println("сообщение отправлено");
        }
    }
    public void buildGui() {                                //отрисовка интерфейса
        mainFrame = new JFrame("Chat4u");
        massivUsers = new String[200];                      //заменится на коллекцию
        nicknameList = new JList(massivUsers);
        //panelAnimation = new JPanel();
        panelEast = new JPanel();
        panelSouth = new JPanel();
        panelButton = new JPanel();
        disconnectButton = new JButton("disconnect");
        disconnectButton.setToolTipText("разсоединиться с сервером");
        disconnectButton.setMargin(new Insets(7,18,7,18));
        chatField = new JTextArea();
        chatField.setLineWrap(true);
        chatField.setFocusable(false);
        messageField = new JTextArea(2,0);      //ширина=0, т.к. поле растягивается по всей свободной ширине
        messageField.setLineWrap(true);
        messageField.setToolTipText("введите сообщение");
        scrollListUsers = new JScrollPane(nicknameList);
        scrollMessageField = new JScrollPane(messageField);
        scrollMessageField.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
        scrollMessageField.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        scrollChatField = new JScrollPane(chatField);
        scrollChatField.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        scrollChatField.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
        sendButton = new JButton("send");
        sendButton.setToolTipText("отправить сообщение");
        sendButton.setMargin(new Insets(7,18,7,18));
 
        //построение основного окна(фрейма)
        
        mainFrame.setDefaultLookAndFeelDecorated(true);
        mainFrame.add(BorderLayout.EAST,scrollListUsers);
        mainFrame.add(BorderLayout.SOUTH,panelSouth);
        //mainFrame.add(BorderLayout.WEST,panelAnimation);
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   //задаем операцию по закрытии фрейма
        mainFrame.setSize(1200, 900);                               //задаем размеры фрейма
        mainFrame.setVisible(true);                             //делаем фрейм видимым      
        mainFrame.add(BorderLayout.CENTER, scrollChatField);
                
        //построение списка юзеров(восточная панель)
        
        nicknameList.setFixedCellHeight(20);                        //задаем высоту ячейки листа
        nicknameList.setFixedCellWidth(157);                        //задаем ширину ячейки листа
        nicknameList.setAutoscrolls(true);                      //добавляем автоскрол
        nicknameList.setBackground(Color.cyan);
        nicknameList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); //ограничиваем выбор до одного ника в списке
        for(int i=0;i<100;i++)                                      //заменится на коллекцию
            massivUsers[i] = "User Name";
        
        scrollListUsers.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        scrollListUsers.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
        
        //размещение кнопок(южная панель)
                
        panelButton.setLayout(new BoxLayout(panelButton,0));
        panelButton.setBackground(Color.DARK_GRAY);
        panelButton.setAlignmentX(JComponent.CENTER_ALIGNMENT);
        panelButton.setAlignmentY(JComponent.CENTER_ALIGNMENT);
        panelButton.add(sendButton);
        panelButton.add(disconnectButton);
        
        //построение области ввода текста(южная панель)
 
        panelSouth.setLayout(new BorderLayout());
        panelSouth.add(BorderLayout.CENTER,scrollMessageField);
        panelSouth.add(BorderLayout.EAST,panelButton);      
            
        //построение области анимации
        
    /*  panelAnimation.setSize(50, 800);
        panelAnimation.setBackground(Color.gray.darker());
        panelAnimation.setBorder(BorderFactory.createLineBorder(Color.BLACK,1));
        panelAnimation.setToolTipText("just 4 fun");
    */          
        //создание слушателей событий для кнопок
        
        disconnectButton.addActionListener(new DisconnectButton());
        sendButton.addActionListener(new SendButton());
    }
    public void actionPerformed(ActionEvent event){
        JButton button2;
        disconnectButton.setText("puched");
        button2 = new JButton("second button");
        panelEast.add(BorderLayout.WEST, button2);
    }
public static void main(String[] args){
    ChatClientGui chatClientGui = new ChatClientGui();
    chatClientGui.buildGui();
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы