Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JTextArea和JScrollBar的交互问题_Java_Swing_Jtextarea_Jscrollbar - Fatal编程技术网

Java JTextArea和JScrollBar的交互问题

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

我有一些在网上找不到的问题。我使用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;
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());
}