Автоматическое изменение размеров компонентов на фрейме при его изменении - 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();
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д