2016-11-08 4 views
0

* В коде NetBeans много кода, относящегося к графическому интерфейсу.Java - проверьте, нажата ли кнопка другим классом

ClientGUI.java

public class ClientGUI extends javax.swing.JFrame { 

String username; 


/** 
* Creates new form NewJFrame 
*/ 
public ClientGUI() { 
    initComponents(); 

} 

/** 
* This method is called from within the constructor to initialize the form. 
* WARNING: Do NOT modify this code. The content of this method is always 
* regenerated by the Form Editor. 
*/ 
@SuppressWarnings("unchecked") 
// <editor-fold defaultstate="collapsed" desc="Generated Code">       
private void initComponents() { 

    jPanel1 = new javax.swing.JPanel(); 
    jLabel1 = new javax.swing.JLabel(); 
    usernameTxt = new javax.swing.JTextField(); 
    passwordTxt = new javax.swing.JTextField(); 
    loginBtn = new javax.swing.JButton(); 
    jLabel2 = new javax.swing.JLabel(); 
    jLabel3 = new javax.swing.JLabel(); 
    uploadBtn = new javax.swing.JButton(); 
    jLabel4 = new javax.swing.JLabel(); 
    downloadBtn = new javax.swing.JButton(); 
    logOffBtn = new javax.swing.JButton(); 
    portTxt = new javax.swing.JTextField(); 
    hostTxt = new javax.swing.JTextField(); 
    createFile = new javax.swing.JButton(); 
    fileNameTxt = new javax.swing.JTextField(); 
    connectionLbl = new javax.swing.JLabel(); 
    notifyLbl = new javax.swing.JLabel(); 

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

    jPanel1.setBackground(new java.awt.Color(0, 0, 51)); 

    jLabel1.setFont(new java.awt.Font("Tahoma", 0, 18)); // NOI18N 
    jLabel1.setForeground(new java.awt.Color(255, 255, 255)); 
    jLabel1.setText("File Transfer System"); 

    usernameTxt.setText("Username"); 

    passwordTxt.setText("Password"); 

    loginBtn.setText("Login"); 
    loginBtn.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      loginBtnActionPerformed(evt); 
     } 
    }); 

    jLabel2.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N 
    jLabel2.setForeground(new java.awt.Color(255, 255, 255)); 
    jLabel2.setText("Login"); 

    jLabel3.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N 
    jLabel3.setForeground(new java.awt.Color(255, 255, 255)); 
    jLabel3.setText("Upload"); 

    uploadBtn.setText("Upload"); 
    uploadBtn.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      uploadBtnActionPerformed(evt); 
     } 
    }); 

    jLabel4.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N 
    jLabel4.setForeground(new java.awt.Color(255, 255, 255)); 
    jLabel4.setText("Download"); 

    downloadBtn.setText("Search File"); 

    logOffBtn.setBackground(new java.awt.Color(153, 0, 0)); 
    logOffBtn.setForeground(new java.awt.Color(255, 255, 255)); 
    logOffBtn.setText("Log Off"); 
    logOffBtn.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      logOffBtnActionPerformed(evt); 
     } 
    }); 

    portTxt.setText("7"); 
    portTxt.setToolTipText("Port"); 

    hostTxt.setText("localhost"); 

    createFile.setText("Create File"); 
    createFile.addActionListener(new java.awt.event.ActionListener() { 
     public void actionPerformed(java.awt.event.ActionEvent evt) { 
      createFileActionPerformed(evt); 
     } 
    }); 

    fileNameTxt.setText("File Name"); 

    connectionLbl.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N 
    connectionLbl.setForeground(new java.awt.Color(255, 0, 0)); 
    connectionLbl.setText("Not Connected"); 

    notifyLbl.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N 
    notifyLbl.setForeground(java.awt.Color.green); 

    javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); 
    jPanel1.setLayout(jPanel1Layout); 
    jPanel1Layout.setHorizontalGroup(
     jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(jPanel1Layout.createSequentialGroup() 
      .addGap(21, 21, 21) 
      .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
       .addComponent(connectionLbl) 
       .addComponent(hostTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 82, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addGroup(jPanel1Layout.createSequentialGroup() 
        .addGap(152, 152, 152) 
        .addComponent(jLabel1)) 
       .addGroup(jPanel1Layout.createSequentialGroup() 
        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) 
         .addComponent(portTxt, javax.swing.GroupLayout.Alignment.LEADING) 
         .addComponent(jLabel2, javax.swing.GroupLayout.Alignment.LEADING) 
         .addComponent(usernameTxt, javax.swing.GroupLayout.Alignment.LEADING) 
         .addComponent(passwordTxt, javax.swing.GroupLayout.Alignment.LEADING) 
         .addComponent(loginBtn, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 82, Short.MAX_VALUE)) 
        .addGap(101, 101, 101) 
        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
         .addComponent(notifyLbl) 
         .addGroup(jPanel1Layout.createSequentialGroup() 
          .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) 
           .addComponent(fileNameTxt, javax.swing.GroupLayout.Alignment.LEADING) 
           .addComponent(jLabel3, javax.swing.GroupLayout.Alignment.LEADING) 
           .addComponent(createFile, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
           .addComponent(uploadBtn, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
          .addGap(120, 120, 120) 
          .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
           .addComponent(downloadBtn) 
           .addComponent(jLabel4) 
           .addComponent(logOffBtn)))))) 
      .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
    ); 
    jPanel1Layout.setVerticalGroup(
     jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addGroup(jPanel1Layout.createSequentialGroup() 
      .addContainerGap() 
      .addComponent(jLabel1) 
      .addGap(26, 26, 26) 
      .addComponent(connectionLbl) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 68, Short.MAX_VALUE) 
      .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
       .addComponent(jLabel2) 
       .addComponent(jLabel3) 
       .addComponent(jLabel4)) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
      .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
       .addComponent(usernameTxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addComponent(downloadBtn) 
       .addComponent(createFile)) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
      .addComponent(passwordTxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addGap(18, 18, 18) 
      .addComponent(hostTxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
      .addGap(10, 10, 10) 
      .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
       .addComponent(portTxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addComponent(fileNameTxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) 
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) 
      .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
       .addComponent(loginBtn) 
       .addComponent(logOffBtn) 
       .addComponent(uploadBtn)) 
      .addGap(42, 42, 42) 
      .addComponent(notifyLbl) 
      .addGap(36, 36, 36)) 
    ); 

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
    getContentPane().setLayout(layout); 
    layout.setHorizontalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
    ); 
    layout.setVerticalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 
    ); 

    pack(); 
}// </editor-fold>       

public ClientGUI(ActionListener listener) 
{     
    uploadBtn.addActionListener(listener); 
    add(uploadBtn); 
} 
private void loginBtnActionPerformed(java.awt.event.ActionEvent evt) {           
    try { 


     String hostname = hostTxt.getText(); 
     String port = portTxt.getText(); 
     username = usernameTxt.getText(); 
     String password = passwordTxt.getText(); 
     ClientGUI client = new ClientGUI(); 


     Users usersClass = new Users();    

     if (hostname.length() == 0) // if user did not enter a name 
     { 
      hostname = "localhost"; // use the default host name 
     } 

     if (port.length() == 0) // if user did not enter a name 
     { 
      port = "7"; // use the default host name 
     } 

     Map<String, String> users; 
     users = usersClass.getSet(); 

     if (users.containsKey(username) && users.containsValue(password)) { 
      JOptionPane.showMessageDialog(null, "Logged in Successfully. Welcome " + username); 
      connectionLbl.setText("Connected"); 
      connectionLbl.setForeground(Color.green); 
      hostTxt.setEditable(false); 
      portTxt.setEditable(false); 
      usernameTxt.setEditable(false); 
      passwordTxt.setEditable(false); 
      loginBtn.setEnabled(false); 

      createUserFolder(username); 
      new File("C:\\ServerFolder\\" + username).mkdirs(); 
     } else if (!users.containsKey(username) && !users.containsValue(password)) { 
      JOptionPane.showMessageDialog(null, "User does not exist. Try again."); 
     } 

     ClientHelper helper 
       = new ClientHelper(hostname, port, username, password); 

     boolean check = client.validateUsername(username); 
     while (check) { 
      String serverResponse = helper.sendMessageUsername(username); 
      System.out.println(serverResponse); 
      check = false; 
     } 

    } catch (SocketException ex) { 
     Logger.getLogger(ClientGUI.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (UnknownHostException ex) { 
     Logger.getLogger(ClientGUI.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (IOException ex) { 
     Logger.getLogger(ClientGUI.class.getName()).log(Level.SEVERE, null, ex); 
    } 


}           


public File createUserFolder(String folderName) { 
    File directory = new File("C:\\" + folderName);  
    // if the directory does not exist, create it 
    if (!directory.exists()) { 
     System.out.println("Creating Directory... "); 
     boolean result = false; 

     try { 
      directory.mkdir(); 
      result = true; 
     } catch (SecurityException se) { 
      //handle it 
     } 
     if (result) { 
      System.out.println("Directory Created"); 
     } 
    } 

    return directory; 
} 

private void logOffBtnActionPerformed(java.awt.event.ActionEvent evt) {           

    hostTxt.setEditable(true); 
    portTxt.setEditable(true); 
    usernameTxt.setEditable(true); 
    passwordTxt.setEditable(true); 
    loginBtn.setEnabled(true); 

    connectionLbl.setText("Not Connected"); 
    connectionLbl.setForeground(Color.red); 

}           

public void createFile(String fileName) { 
    String sb = "TEST CONTENT"; 
    JFileChooser chooser = new JFileChooser(); 
    chooser.setCurrentDirectory(new File("C:\\" + fileName)); 

    int retrieval = chooser.showSaveDialog(null); 

    if (retrieval == JFileChooser.APPROVE_OPTION) { 
     try { 
      FileWriter fw = new FileWriter(chooser.getSelectedFile() + ".txt"); 
      fw.write(sb.toString()); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 
} 


private void createFileActionPerformed(java.awt.event.ActionEvent evt) {           
    // TODO add your handling code here:  
    createFile(username); 
    notifyLbl.setText("File Created!"); 

    Timer timer = new Timer(5000, e -> notifyLbl.setText("")); 
    timer.setRepeats(false); 
    timer.start(); 

}           


private void uploadBtnActionPerformed(java.awt.event.ActionEvent evt) {           

    try { 

     ActionListener listener = new Server(); 

    ClientGUI g = new ClientGUI(); 
    g.uploadBtn.addActionListener(listener); 


     // TODO add your handling code here: 
     String fileName = fileNameTxt.getText(); 
     String hostname = hostTxt.getText(); 
     String port = portTxt.getText(); 
     String username = usernameTxt.getText(); 
     String password = passwordTxt.getText(); 

     ClientHelper helper 
       = new ClientHelper(hostname, port, username, password); 

     File file = new File("C:\\" + username + "\\" + fileName + ".txt"); 
     if (!file.exists()) { 
      System.out.println("File not found!"); 
     } else { 

      String myFile = helper.writeFileAndSend(fileName, username); 
      System.out.println("Response:\n" + "File name: " + myFile + " User: " + username); 
     } 
    } catch (SocketException ex) { 
     Logger.getLogger(ClientGUI.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (UnknownHostException ex) { 
     Logger.getLogger(ClientGUI.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (IOException ex) { 
     Logger.getLogger(ClientGUI.class.getName()).log(Level.SEVERE, null, ex); 
    } 
}           

public boolean validateUsername(String username) { 
    username = username.trim(); 

    if (username == null || username.equals("")) { 
     return false; 
    } 

    if (!username.matches("[a-zA-Z]*")) { 
     return false; 
    } 

    return true; 
} 


/** 
* @param args the command line arguments 
*/ 
public static void main(String args[]) { 

    ClientGUI g = new ClientGUI(new Server()); 

    /* Create and display the form */ 
    java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      new ClientGUI().setVisible(true); 
     } 
    }); 
} 

// Variables declaration - do not modify      
private javax.swing.JLabel connectionLbl; 
private javax.swing.JButton createFile; 
private javax.swing.JButton downloadBtn; 
private javax.swing.JTextField fileNameTxt; 
private javax.swing.JTextField hostTxt; 
private javax.swing.JLabel jLabel1; 
private javax.swing.JLabel jLabel2; 
private javax.swing.JLabel jLabel3; 
private javax.swing.JLabel jLabel4; 
private javax.swing.JPanel jPanel1; 
private javax.swing.JButton logOffBtn; 
private javax.swing.JButton loginBtn; 
private javax.swing.JLabel notifyLbl; 
private javax.swing.JTextField passwordTxt; 
private javax.swing.JTextField portTxt; 
public javax.swing.JButton uploadBtn; 
private javax.swing.JTextField usernameTxt; 
// End of variables declaration     

}

Server.java

public class Server extends ClientGUI implements ActionListener { 

public static void main(String[] args) { 

    ClientGUI client = new ClientGUI(); 
    client.createUserFolder("ServerFolder");  

    int serverPort = 7; // default port 
    if (args.length == 1) { 
     serverPort = Integer.parseInt(args[0]); 
    } 
    try { 
     // instantiates a datagram socket for both sending 
     // and receiving data 
     ServerDatagramSocket mySocket = new ServerDatagramSocket(serverPort); 
     System.out.println("Server Ready...");   

     while (true) { // forever loop 
      //Login 
      DatagramMessage request = mySocket.receiveMessageAndSender(); 
      System.out.println("201 - Request Received"); 
      String message = request.getMessage(); 

      System.out.println("204 - Login Successful - Welcome " + message); 
      // Now send the echo to the requestor 
      mySocket.sendMessage(request.getAddress(), 
        request.getPort(), message);     




      //End Login 




      //Upload 
      System.out.println("\n304 - Upload Requested...");    
      byte[] receiveData = new byte[MAX_LEN]; 
      byte[] sendData = new byte[MAX_LEN]; 
      DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); 
      mySocket.receive(receivePacket); 

      String sentence = new String(receivePacket.getData()); 
      SimpleDateFormat df = new SimpleDateFormat("EEE, MMM d, ''yy"); 

      File moddedFile = new File("C:\\ServerFolder\\"); 

      mySocket.sendMessage(request.getAddress(), request.getPort(), "Last upload on " + df.format(moddedFile.lastModified())); 
      System.out.println("305 - Last upload on " + df.format(moddedFile.lastModified())); 
      System.out.println("306 - Recieved Data: " + sentence); 

      InetAddress IPAddress = receivePacket.getAddress(); 
      int port = receivePacket.getPort(); 
      String capitalizedSentence = sentence.toUpperCase(); 
      sendData = capitalizedSentence.getBytes(); 
      DatagramPacket sendPacket 
        = new DatagramPacket(sendData, sendData.length, IPAddress, port); 
      mySocket.send(sendPacket); 

      System.out.println("\n307 - File Recieved and ready for upload..."); 
      Writer writer = null; 

      String todaysDate = df.format(new Date()); 

      writer = new BufferedWriter(new OutputStreamWriter(
        new FileOutputStream("C:\\ServerFolder\\" + message.trim() + "\\" + todaysDate + ".txt"), "utf-8")); 
      writer.write(sentence); 
      System.out.println("308 - File upload complete!"); 
      JOptionPane.showMessageDialog(null, "File upload complete!"); 
      writer.close(); 

      //End Upload        
     } //end while 

    } // end try  
    catch (Exception ex) { 
     ex.printStackTrace(); 
    } // end catch  
}//end main 

@Override 
public void actionPerformed(ActionEvent e) {    
    if((e.getActionCommand()).equals("Upload")) 
     JOptionPane.showMessageDialog(null, "Button Pressed"); 
} 


} // end class  

Так как вы можете это где я нахожусь. Я использую NetBeans, NetBeans создает метод actionPerformed для меня, который слушает, когда нажимается кнопка, которая отлично работает на стороне клиента. Но я хочу знать, как проверить, что кнопка нажата на клиенте из класса Server. Другими словами, я хочу что-то сделать в классе сервера при нажатии кнопки на стороне клиента, у Клиента есть графический интерфейс, созданный с помощью панели инструментов NetBeans. Любая помощь оценивается. Текущий код не работает. Имейте в виду, что я должен запустить сервер, прежде чем запускать клиент, если это поможет.

EDIT:

Вот и все. С двумя классами, с которыми я сталкиваюсь. Выполняя это в настоящий момент, uploadBtn имеет значение null, не уверен, почему. Конструктор вызывается после того, как кнопка была инициализирована.

+0

Как взаимодействуют клиент и сервер? – bradimus

+0

Ваш код указывает, что сервер запускает клиент, который на самом деле не является архитектурой клиент-сервер. Предполагая, что вы хотите продолжать делать это, вы можете попробовать зарегистрировать слушателя на кнопке. – Thomas

+0

Розетки/Дейтаграммы. Это для колледжа, и я просто застрял здесь. –

ответ

2
  • Вы должны сервер для реализации ActionListener
  • Затем поместите в клиенте:

    ActionListener listener = new EventListener(); 
    
        fileName.addActionListener(listener); 
        hostname.addActionListener(listener); 
        port.addActionListener(listener); 
        username.addActionListener(listener); 
        password.addActionListener(listener); 
    

Имя файла (или имя хоста или имя пользователя или пароль) является имя, данное JButton ,

  • включает также следующие сервер:

    String option = e.getActionCommand(); 
    

е является экземпляром ActionEvent

при нажатии кнопки начальной строки, которая передается в конструктор JButton будет значение строки, если:

JButton fileNameButton = new JButton("file Name"); 

Когда кнопка нажата, она будет равна «имя файла».

Заметьте, что мой класс называется EventListener.

+0

Я вижу. Пойдем к этому сейчас и, надеюсь, получим его работу. Я понимаю, что вы имеете в виду. Спасибо. –

+0

серверу необходимо «выполнять ActionListener» и, пожалуйста, избавиться от '.uploadBtn' в ClientGUI.java. – shaam

+0

@AleksandarZoric Я добавил что-то к своему ответу; e.getActionCommand() назначает команду clicked для опции. – shaam

Смежные вопросы