2016-12-14 2 views
0

Привет всем Я пытаюсь создать графический интерфейс сеанса чата. Мне удалось разместить все компоненты в правильном порядке. Единственная проблема заключается в том, что Frame не отвечает, всякий раз, когда я пытаюсь изменить размер окна, компонент остается с тем же размером, также когда я набираю текст в JtextArea, они расширяют границы, захватывая любой другой компонент в кадре. Я попытался использовать JScrollPane или установил максимальный размер, но он не работает. Может кто-нибудь мне помочь. Это мой код.JScrollPane и отзывчивый графический интерфейс с gridbaglayout

import java.awt.*; 

import javax.swing.*; 
import javax.swing.border.Border; 
import javax.swing.text.DefaultCaret; 

public class ClientGUI extends JPanel { 

    public ClientGUI() { 
     Dimension size = getPreferredSize(); 
     size.width = 500; 
     setPreferredSize(size); 
     setBorder(BorderFactory.createTitledBorder("Peron")); 

     GridBagConstraints gbc = new GridBagConstraints(); 
     JTextArea chat, list; 
     JTextField wm; 
     JButton sm, sf, pm, lo; 
     JFrame fr = new JFrame("FRAME"); 
     fr.setVisible(true); 
     fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     fr.setSize(200, 200); 
     fr.setMinimumSize(new Dimension(1400, 1000)); 
     JPanel panel = new JPanel(new GridBagLayout()); 
     fr.add(panel); 

     gbc.insets = new Insets(40, 40, 40, 40); 
     chat = new JTextArea("Welcome to the chat room"); 
     // chat.setEditable(false); 
     JScrollPane scroll = new JScrollPane(chat); // place the JTextArea in a 
                // scroll pane 
     panel.add(scroll); 
     gbc.fill = GridBagConstraints.HORIZONTAL; 
     gbc.gridwidth = 5; 
     gbc.gridheight = 7; 
     // gbc.gridwidth = java.awt.GridBagConstraints.RELATIVE; 
     gbc.gridx = 0; 
     gbc.gridy = 1; 
     gbc.ipady = 400; 
     gbc.ipadx = 200; 
     panel.add(chat, gbc); 

     wm = new JTextField("Insert message", 10); 
     gbc.fill = GridBagConstraints.HORIZONTAL; 
     gbc.gridwidth = 1; 
     gbc.gridheight = 2; 
     gbc.ipady = 150; 
     gbc.ipadx = 300; 
     gbc.gridx = 0; 
     gbc.gridy = 10; 
     panel.add(wm, gbc); 

     list = new JTextArea("User online"); 

     gbc.gridx = 5; 
     gbc.gridy = 2; 
     gbc.ipady = 400; 
     gbc.ipadx = 300; 
     panel.add(list, gbc); 

     sm = new JButton("Send"); 
     gbc.gridheight = 1; 
     gbc.fill = GridBagConstraints.HORIZONTAL; 
     gbc.gridx = 3; 
     gbc.gridy = 10; 
     gbc.ipady = 20; 
     gbc.ipadx = 200; 
     panel.add(sm, gbc); 

     pm = new JButton("Private message"); 
     gbc.fill = GridBagConstraints.HORIZONTAL; 
     gbc.gridx = 4; 
     gbc.gridy = 10; 
     gbc.ipady = 20; 
     gbc.ipadx = 20; 
     panel.add(pm, gbc); 

     lo = new JButton("LOGOUT"); 
     gbc.gridx = 5; 
     gbc.gridy = 1; 
     gbc.ipady = 20; 
     panel.add(lo, gbc); 

     sf = new JButton("Send File"); 
     gbc.fill = GridBagConstraints.HORIZONTAL; 
     gbc.gridx = 5; 
     gbc.gridy = 10; 
     gbc.ipady = 20; 
     gbc.ipadx = 20; 
     panel.add(sf, gbc); 

    } 

} 

ответ

2

Вы проблема с текстовой области, где вы положили panel.add(scroll). Удалите эту строку. Кроме того, вы должны добавить панель прокрутки, а не текстовую область на панель. Поменять panel.add(chat,gbc) на panel.add(scroll,gbc)

+0

Огромное спасибо, это сработало! – Werokk

+0

Вы знаете, как заставить компонент реагировать на изменение размера окна? – Werokk

+0

@Werokk вы можете уточнить, что вы имеете в виду? Кажется, я заметил, что кадр тоже странный. Я удаляю две строки 'fr.setMinimumSize()' и 'fr.setSize()' и добавляет 'fr.pack()' в конце кода. Я бы предложил провести реструктуризацию кода, чтобы отделить панель и конфигурацию кадра, чтобы упростить поиск и устранение неисправностей. – KyleKW

Смежные вопросы