Как изменить функцию кнопки JFrame?

#java #swing #actionlistener

Вопрос:

Я пишу программу в NetBeans JFrame , которая будет использовать одну кнопку для подключения и отключения. Когда клиент нажимает кнопку «Подключиться», ActionListener он создает соединение с сервером. При подключении текст кнопки меняется с «Подключиться» на «Отключить».

Если клиент снова нажмет на кнопку, соединение необходимо закрыть. Конкретные команды, которые я хочу реализовать, — это pw.close() , br.close() , и mySocket.close() .

Если по какой-либо причине клиент потеряет соединение с сервером, текст кнопки снова изменится на «Подключиться», и при нажатии на кнопку необходимо восстановить соединение. Это то, что у меня есть до сих пор:

 private void connectBtnActionPerformed(java.awt.event.ActionEvent evt) {                                           
       
        try {
        
        mySocket = new Socket(serverName.getText(), Integer.parseInt(port.getText())); //connect to server
        pw = new PrintWriter( mySocket.getOutputStream(), true ); //initialize printwriter
        br =  new BufferedReader( new InputStreamReader(mySocket.getInputStream() ) );//initialize buffered reader                  
        
        output.append("Connected to servern");
        }
        catch (IOException e)
        {output.append("Connection Failedn");
        }  
          
       if (mySocket.isConnected()){
            connectBtn.setText("Disconnect");
 

Ответ №1:

Используйте JCheckBox или JToggleButton с текстом «Подключено».

Проверьте состояние поля / кнопки в прослушивателе действий, чтобы ( if / else ) выполнить соответствующее действие.

Ответ №2:

Чтобы заставить вашу кнопку J действовать как переключатель, вы могли бы сделать что-то подобное этому:

 // Class member variable.
private static boolean connectedToServer = false;

private void connectBtnActionPerformed(java.awt.event.ActionEvent evt) {                                           
    String buttonCaption = connectBtn.getText(); 
    if (buttonCaption.equalsIgnoreCase("connect") amp;amp; !connectedToServer) {
        /* A method to connect to server. Returns boolean true 
           if successful and boolean false if not successful. */
        connectedToServer = connectToServer();   
        if (connectedToServer) {
            connectBtn.setText("Disconnect");
            connectBtn.setBackground(Color.green);
            connectBtn.setForeground(Color.black);
        }
    }
    else if (buttonCaption.equalsIgnoreCase("Disconnect") amp;amp; connectedToServer) {
        /* A method to disconnect from server. Returns boolean false 
           if successful and boolean true if not successful.     */ 
        connectedToServer = disconnectFromServer();
        if (!connectedToServer) {
            connectBtn.setText("Connect");
            connectBtn.setBackground(UIManager.getColor("Button.background"));
            connectBtn.setForeground(UIManager.getColor("Button.foreground"));
        }
    }
}