Java JTextArea和JScrollBar的交互问题
我有一些在网上找不到的问题。我使用JTextArea和JScrollBar。填充JTextArea窗口时,它会增加。这很可能是由于滚动,因为没有滚动,它在旧类中工作,但填充时无法编写更多内容,因此我决定添加滚动 旧代码:Java JTextArea和JScrollBar的交互问题,java,swing,jtextarea,jscrollbar,Java,Swing,Jtextarea,Jscrollbar,我有一些在网上找不到的问题。我使用JTextArea和JScrollBar。填充JTextArea窗口时,它会增加。这很可能是由于滚动,因为没有滚动,它在旧类中工作,但填充时无法编写更多内容,因此我决定添加滚动 旧代码: private static final String IP_ADDRESS = "192.168.56.1"; private static final int PORT = 8000; private static final int WIDTH = 600; priv
private static final String IP_ADDRESS = "192.168.56.1";
private static final int PORT = 8000;
private static final int WIDTH = 600;
private static final int HEIGHT = 400;
private final JTextArea log = new JTextArea();
private final JTextField fieldNickName = new JTextField("Admin");
private final JTextField fieldInput = new JTextField();
private TCPConnection connection;
private ClientWindow(){
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(WIDTH, HEIGHT);
setLocationRelativeTo(null);//-
setAlwaysOnTop(true);//-
log.setEditable(false);
log.setLineWrap(true); //-
add(log, BorderLayout.CENTER);
fieldInput.addActionListener(this);
add(fieldInput, BorderLayout.SOUTH);
add(fieldNickName, BorderLayout.NORTH);
setVisible(true);
try {
connection = new TCPConnection(this, IP_ADDRESS, PORT);
} catch (IOException ex) {
printMessage("Database exception: " + ex);
}
}
public static void goToChat(){
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new ClientWindow();
}
});
}
@Override
public void actionPerformed(ActionEvent e) {
String message = fieldInput.getText();
if (message.trim().equals("")) return;
fieldInput.setText(null);
connection.sendString(fieldNickName.getText() + ": " + message);
}
@Override
public void onConnectionReady(TCPConnection tcpConnection) {
printMessage("Database ready ...");
}
@Override
public void onReceiveString(TCPConnection tcpConnection, String value) {
printMessage(value);
}
@Override
public void onDisconnect(TCPConnection tcpConnection) {
printMessage("Database close!");
}
@Override
public void onException(TCPConnection tcpConnection, Exception ex) {
printMessage("Database exception: " + ex);
}
private synchronized void printMessage(final String message){
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
log.append(message + "\n");
log.setCaretPosition(log.getDocument().getLength());
}
});
}
}
现在:
私有静态最终字符串IP_ADDRESS=“192.168.56.1”;
专用静态最终int端口=8000;
私有静态最终字符串昵称=clientententrance.get昵称();
私有静态CopyOnWriteArrayList All昵称=新CopyOnWriteArrayList();
私有静态ConcurrentHashMap hashMap=新ConcurrentHashMap();
私人JLabel jLabel1;
私人JLabel labelForNickname;
私人JLabel jLabel3;
专用静态JLabel jLabel4;
私人JScrollBar JScrollBar 1;
专用JTextField jTextField1;
私有JTextField字段输入;
私人区域日志;
专用TCP连接;
私有客户端窗口(){
初始化组件();
试一试{
连接=新的TCP连接(此,IP_地址,端口);
}捕获(IOEX异常){
printMessage(“数据库异常:”+ex);
}
}
私有组件(){
All昵称。添加(昵称);
jLabel1=新的JLabel();
jTextField1=新的JTextField();
log=新的JTextArea(10,10);
jScrollBar1=新的JScrollBar();
fieldInput=新的JTextField();
labelForNickname=新的JLabel();
jLabel3=新的JLabel();
jLabel4=新的JLabel();
log.setEditable(false);
jLabel1.setText(“jLabel1”);
jTextField1.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件evt){
JTextfield1执行的操作(evt);
}
});
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
可设置大小(假);
setAlwaysOnTop(真);
setLocationRelativeTo(空);
log.setWrapStyleWord(true);
log.setLineWrap(true);
DefaultCaret插入符号=(DefaultCaret)log.getCaret();
插入符号setUpdatePolicy(DefaultCaret.NEVER\u UPDATE);
fieldInput.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件evt){
执行的消息操作(evt);
}
});
setText(“您的昵称:”+昵称);
setText(“在线用户:”);
addnew昵称();
字符串全部=”;
for(字符串s:all昵称){
全部+=s+“\n”;
}//修复我:线程!!!!
jLabel4.设置垂直对齐(SwingConstants.顶部);
GroupLayout=newgrouplayout(getContentPane());
getContentPane().setLayout(布局);
layout.setHorizontalGroup(
layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(GroupLayout.Alignment.TRAILING,layout.createSequentialGroup()
.addGap(22,22,22)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(labelForNickname、GroupLayout.Alignment.Training、GroupLayout.DEFAULT\u大小、529、Short.MAX\u值)
.addComponent(字段输入)
.addComponent(日志))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollBar1,GroupLayout.PREFERRED\u SIZE,GroupLayout.DEFAULT\u SIZE,GroupLayout.PREFERRED\u SIZE)
.addGap(26,26,26)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel4,GroupLayout.PREFERRED_SIZE,183,GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel3,GroupLayout.PREFERRED_SIZE,173,GroupLayout.PREFERRED_SIZE))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(labelForNickname,GroupLayout.PREFERRED\u大小,16,GroupLayout.PREFERRED\u大小)
.addGap(8,8,8)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING,false)
.addComponent(日志)
.addComponent(jScrollBar1,GroupLayout.DEFAULT\u SIZE,517,Short.MAX\u值))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,13,Short.MAX_值)
.addComponent(fieldInput、GroupLayout.PREFERRED\u SIZE、GroupLayout.DEFAULT\u SIZE、GroupLayout.PREFERRED\u SIZE)
.addGap(19,19,19))
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel3)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel4,GroupLayout.DEFAULT\u SIZE,GroupLayout.DEFAULT\u SIZE,Short.MAX\u值)
.addGap(31,31,31)))
);
jLabel4.getAccessibleContext().setAccessibleName(“”);
包装();
}
私有无效jTextField2ActionPerformed(ActionEvent evt){
}
私有无效jTextField1ActionPerformed(ActionEvent evt){
}
公共静态void goToChat(字符串id、字符串昵称){
CustomizeItemsJavaFX.start(ClientWindow.class);
invokeLater(新的Runnable(){
公开募捐{
新建ClientWindow().setVisible(true);
}
});
}
公共无效消息ActionPerformed(ActionEvent e){
字符串消息=fieldInput.getText();
if(message.trim().equals(“”)返回;
fieldInput.setText(空);
connection.sendString(昵称+”:“+消息);
//Database.writeToDatabaseNewMessages(消息);
}
@凌驾
连接准备就绪(TCP连接TCP连接){
打印消息(“数据库就绪…”);
}
@凌驾
接收字符串上的公共void(TCPConnection TCPConnection,字符串值){
打印消息(值);
}
@凌驾
公共无效断开连接(TCP连接
private static final String IP_ADDRESS = "192.168.56.1";
private static final int PORT = 8000;
private static final String nickname = ClientEntrance.getNickname();
private static CopyOnWriteArrayList<String> allNickname = new CopyOnWriteArrayList<>();
private static ConcurrentHashMap<String, String> hashMap= new ConcurrentHashMap<>();
private JLabel jLabel1;
private JLabel labelForNickname;
private JLabel jLabel3;
private static JLabel jLabel4;
private JScrollBar jScrollBar1;
private JTextField jTextField1;
private JTextField fieldInput;
private JTextArea log;
private TCPConnection connection;
private ClientWindow() {
initComponents();
try {
connection = new TCPConnection(this, IP_ADDRESS, PORT);
} catch (IOException ex) {
printMessage("Database exception: " + ex);
}
}
private void initComponents() {
allNickname.add(nickname);
jLabel1 = new JLabel();
jTextField1 = new JTextField();
log = new JTextArea(10, 10);
jScrollBar1 = new JScrollBar();
fieldInput = new JTextField();
labelForNickname = new JLabel();
jLabel3 = new JLabel();
jLabel4 = new JLabel();
log.setEditable(false);
jLabel1.setText("jLabel1");
jTextField1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
jTextField1ActionPerformed(evt);
}
});
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setResizable(false);
setAlwaysOnTop(true);
setLocationRelativeTo(null);
log.setWrapStyleWord(true);
log.setLineWrap(true);
DefaultCaret caret = (DefaultCaret)log.getCaret();
caret.setUpdatePolicy(DefaultCaret.NEVER_UPDATE);
fieldInput.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
messageActionPerformed(evt);
}
});
labelForNickname.setText("Your nickname: " + nickname);
jLabel3.setText("Users online:");
addNewNicknames();
String all = "";
for (String s : allNickname) {
all += s + "\n";
}//FIXME: Threads!!!!
jLabel4.setVerticalAlignment(SwingConstants.TOP);
GroupLayout layout = new GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGap(22, 22, 22)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(labelForNickname, GroupLayout.Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 529, Short.MAX_VALUE)
.addComponent(fieldInput)
.addComponent(log))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollBar1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addGap(26, 26, 26)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel4, GroupLayout.PREFERRED_SIZE, 183, GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel3, GroupLayout.PREFERRED_SIZE, 173, GroupLayout.PREFERRED_SIZE))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(labelForNickname, GroupLayout.PREFERRED_SIZE, 16, GroupLayout.PREFERRED_SIZE)
.addGap(8, 8, 8)
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING, false)
.addComponent(log)
.addComponent(jScrollBar1, GroupLayout.DEFAULT_SIZE, 517, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 13, Short.MAX_VALUE)
.addComponent(fieldInput, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addGap(19, 19, 19))
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel3)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel4, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGap(31, 31, 31))))
);
jLabel4.getAccessibleContext().setAccessibleName("");
pack();
}
private void jTextField2ActionPerformed(ActionEvent evt) {
}
private void jTextField1ActionPerformed(ActionEvent evt) {
}
public static void goToChat(String id, String nickname) {
CustomizeItemsJavaFX.start(ClientWindow.class);
EventQueue.invokeLater(new Runnable() {
public void run() {
new ClientWindow().setVisible(true);
}
});
}
public void messageActionPerformed(ActionEvent e) {
String message = fieldInput.getText();
if (message.trim().equals("")) return;
fieldInput.setText(null);
connection.sendString(nickname + ": " + message);
// Database.writeToDatabaseNewMessages(message);
}
@Override
public void onConnectionReady(TCPConnection tcpConnection) {
printMessage("Database ready ...");
}
@Override
public void onReceiveString(TCPConnection tcpConnection, String value) {
printMessage(value);
}
@Override
public void onDisconnect(TCPConnection tcpConnection) {
printMessage("Database close!");
}
@Override
public void onException(TCPConnection tcpConnection, Exception ex) {
printMessage("Database exception: " + ex);
}
private synchronized void printMessage(final String message){
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
log.append(message + "\n");
log.setCaretPosition(log.getDocument().getLength());
}
});
}
private synchronized static void addNewNicknames(){
StringBuilder all = new StringBuilder();
for (String s : allNickname) all.append(s).append("\n");
jLabel4.setText(all.toString());
}