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