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

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

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

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

Вопрос

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

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

textual
Листинг программы
  1. import java.awt.*;
  2. import java.awt.Color.*;
  3. import java.awt.Dimension;
  4. import java.awt.event.*;
  5. import javax.swing.*;
  6. import java.io.*;
  7. import java.util.Scanner;
  8.  
  9. //создаем графический интерфейс программы
  10.  
  11. public class ChatClientGui {
  12.     private JButton disconnectButton;
  13.     private JFrame mainFrame;
  14.     private String[] massivUsers;
  15.     private JTextArea chatField;
  16.     private JTextArea messageField;
  17.     private JList nicknameList;
  18.     private JPanel panelEast;
  19.     private JPanel panelSouth;
  20.     private JPanel panelButton;
  21.     private JScrollPane scrollListUsers;
  22.     private JScrollPane scrollMessageField;
  23.     private JScrollPane scrollChatField;
  24.     private JButton sendButton;
  25.    
  26.     class DisconnectButton implements ActionListener{           //внутренний класс для события кнопки выхода
  27.         public void actionPerformed(ActionEvent event){
  28.             System.out.println("disconect from chat-server");   //заменить на код дисконекта
  29.         }
  30.     }
  31.     class SendButton implements ActionListener{ //внутренний класс для события кнопки отправки сообщения
  32.         public void actionPerformed(ActionEvent event){
  33.             System.out.println("сообщение отправлено");
  34.         }
  35.     }
  36.     public void buildGui() {                                //отрисовка интерфейса
  37.         mainFrame = new JFrame("Chat4u");
  38.         massivUsers = new String[200];                      //заменится на коллекцию
  39.         nicknameList = new JList(massivUsers);
  40.         //panelAnimation = new JPanel();
  41.         panelEast = new JPanel();
  42.         panelSouth = new JPanel();
  43.         panelButton = new JPanel();
  44.         disconnectButton = new JButton("disconnect");
  45.         disconnectButton.setToolTipText("разсоединиться с сервером");
  46.         disconnectButton.setMargin(new Insets(7,18,7,18));
  47.         chatField = new JTextArea();
  48.         chatField.setLineWrap(true);
  49.         chatField.setFocusable(false);
  50.         messageField = new JTextArea(2,0);      //ширина=0, т.к. поле растягивается по всей свободной ширине
  51.         messageField.setLineWrap(true);
  52.         messageField.setToolTipText("введите сообщение");
  53.         scrollListUsers = new JScrollPane(nicknameList);
  54.         scrollMessageField = new JScrollPane(messageField);
  55.         scrollMessageField.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
  56.         scrollMessageField.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
  57.         scrollChatField = new JScrollPane(chatField);
  58.         scrollChatField.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
  59.         scrollChatField.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
  60.         sendButton = new JButton("send");
  61.         sendButton.setToolTipText("отправить сообщение");
  62.         sendButton.setMargin(new Insets(7,18,7,18));
  63.  
  64.         //построение основного окна(фрейма)
  65.        
  66.         mainFrame.setDefaultLookAndFeelDecorated(true);
  67.         mainFrame.add(BorderLayout.EAST,scrollListUsers);
  68.         mainFrame.add(BorderLayout.SOUTH,panelSouth);
  69.         //mainFrame.add(BorderLayout.WEST,panelAnimation);
  70.         mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   //задаем операцию по закрытии фрейма
  71.         mainFrame.setSize(1200, 900);                               //задаем размеры фрейма
  72.         mainFrame.setVisible(true);                             //делаем фрейм видимым     
  73.         mainFrame.add(BorderLayout.CENTER, scrollChatField);
  74.                
  75.         //построение списка юзеров(восточная панель)
  76.        
  77.         nicknameList.setFixedCellHeight(20);                        //задаем высоту ячейки листа
  78.         nicknameList.setFixedCellWidth(157);                        //задаем ширину ячейки листа
  79.         nicknameList.setAutoscrolls(true);                      //добавляем автоскрол
  80.         nicknameList.setBackground(Color.cyan);
  81.         nicknameList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); //ограничиваем выбор до одного ника в списке
  82.         for(int i=0;i<100;i++)                                      //заменится на коллекцию
  83.             massivUsers[i] = "User Name";
  84.        
  85.         scrollListUsers.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
  86.         scrollListUsers.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
  87.        
  88.         //размещение кнопок(южная панель)
  89.                
  90.         panelButton.setLayout(new BoxLayout(panelButton,0));
  91.         panelButton.setBackground(Color.DARK_GRAY);
  92.         panelButton.setAlignmentX(JComponent.CENTER_ALIGNMENT);
  93.         panelButton.setAlignmentY(JComponent.CENTER_ALIGNMENT);
  94.         panelButton.add(sendButton);
  95.         panelButton.add(disconnectButton);
  96.        
  97.         //построение области ввода текста(южная панель)
  98.  
  99.         panelSouth.setLayout(new BorderLayout());
  100.         panelSouth.add(BorderLayout.CENTER,scrollMessageField);
  101.         panelSouth.add(BorderLayout.EAST,panelButton);     
  102.            
  103.         //построение области анимации
  104.        
  105.     /*  panelAnimation.setSize(50, 800);
  106.         panelAnimation.setBackground(Color.gray.darker());
  107.         panelAnimation.setBorder(BorderFactory.createLineBorder(Color.BLACK,1));
  108.         panelAnimation.setToolTipText("just 4 fun");
  109.     */         
  110.         //создание слушателей событий для кнопок
  111.        
  112.         disconnectButton.addActionListener(new DisconnectButton());
  113.         sendButton.addActionListener(new SendButton());
  114.     }
  115.     public void actionPerformed(ActionEvent event){
  116.         JButton button2;
  117.         disconnectButton.setText("puched");
  118.         button2 = new JButton("second button");
  119.         panelEast.add(BorderLayout.WEST, button2);
  120.     }
  121. public static void main(String[] args){
  122.     ChatClientGui chatClientGui = new ChatClientGui();
  123.     chatClientGui.buildGui();
  124.     }
  125. }

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


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

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

5   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы