【问题标题】:How to change the function of a JFrame button?如何更改 JFrame 按钮的功能?
【发布时间】:2026-01-31 10:10:02
【问题描述】:

我正在使用JFrame 在 NetBeans 中编写一个程序,该程序将使用一个按钮来连接和断开连接。当客户端单击“连接”按钮时,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 server\n");
        }
        catch (IOException e)
        {output.append("Connection Failed\n");
        }  
          
       if (mySocket.isConnected()){
            connectBtn.setText("Disconnect");

【问题讨论】:

    标签: java swing actionlistener


    【解决方案1】:

    使用带有“已连接”文本的 JCheckBoxJToggleButton

    选中动作侦听器中框/按钮的stateif/else)采取适当的动作。

    【讨论】:

      【解决方案2】:

      要使您的 JButton 充当切换按钮,您可以执行类似的操作:

      // Class member variable.
      private static boolean connectedToServer = false;
      
      private void connectBtnActionPerformed(java.awt.event.ActionEvent evt) {                                           
          String buttonCaption = connectBtn.getText(); 
          if (buttonCaption.equalsIgnoreCase("connect") && !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") && 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"));
              }
          }
      }                                          
      

      【讨论】: