[英]How do I make my chat program scroll down as the chat moves along?
我正在制作一個簡單的聊天GUI。 我遇到了一個問題,即隨着聊天的進行,我的程序沒有向下滾動。 我也不確定如何在程序中添加滾動條/窗格,而不會通過將主要文本區域放入面板並破壞界面外觀來弄亂一切。 我如何通過將chatBox
放在JPanel中來調整主聊天框,而不用擰緊它並使它看起來丑陋。 我將在下面發布所有代碼。
MainGUI類:
package coltGUI;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;
import javax.swing.UIManager;
public class MainGUI implements ActionListener {
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();
}
MainGUI gui = new MainGUI();
gui.display();
}
JButton sendMessage;
JTextField messageBox;
JTextArea chatBox;
public void display() {
JFrame frame = new JFrame("Colt Chat");
JPanel southPanel = new JPanel();
frame.getContentPane().add(BorderLayout.SOUTH, southPanel);
southPanel.setBackground(Color.BLUE);
southPanel.setLayout(new GridBagLayout());
messageBox = new JTextField(30);
sendMessage = new JButton("Send Message");
chatBox = new JTextArea();
chatBox.setEditable(false);
frame.getContentPane().add(BorderLayout.CENTER, chatBox);
chatBox.setLineWrap(true);
GridBagConstraints left = new GridBagConstraints();
left.anchor = GridBagConstraints.WEST;
GridBagConstraints right = new GridBagConstraints();
right.anchor = GridBagConstraints.EAST;
right.weightx = 2.0;
southPanel.add(messageBox, left);
southPanel.add(sendMessage, right);
sendMessage.addActionListener(this);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setSize(470, 300);
}
public void actionPerformed(ActionEvent event) {
if (messageBox.getText().length() < 1) {
// do nothing
} else {
chatBox.append(messageBox.getText() + "\n");
messageBox.setText("");
}
}
}
只需將文本區域添加到JScrollPane,然后將滾動窗格添加到框架。 不需要面板。
//frame.getContentPane().add(BorderLayout.CENTER, chatBox);
frame.add(new JScrollPane(chatBox), BorderLayout.CENTER);
請注意,約束應指定為add(...)方法的第二個參數,而不是第一個。
另外,由於JDK5,您不需要使用getContentPane(),frame.add(..)方法將為您完成此操作。
如果要自動滾動,可以簽出“ 文本區域滾動” 。
首先,您需要將chatBox
包裝在JScrollPane
如下所示:
frame.add(new JScrollPane(chatBox), BorderLayout.CENTER);
將消息附加到chatBox
之后, chatBox
需要強制其滾動到末尾,這可以通過以下操作完成:
chatBox.setCaretPosition(chatBox.getDocument().getLength());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.