Java - 检查是否通过另一个类按下了一个按钮

时间:2016-11-08 14:15:51

标签: java swing button

*许多关于GUI的代码都是由NetBeans生成的。

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工具箱创建的GUI。任何帮助赞赏。当前代码不起作用。请记住,在运行客户端之前必须运行服务器,如果有帮助的话。

编辑:

这就是一切。这两个课我遇到了问题。按照目前的方式,uploadBtn为null,不确定原因。按钮初始化后调用构造函数。

1 个答案:

答案 0 :(得分:2)

  • 您需要服务器来实施ActionListener
  • 然后将以下内容放入客户端:

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

fileName(或主机名或用户名或密码)是给予JButton的名称。

  • 还在服务器中包含以下内容:

    String option = e.getActionCommand();
    

是ActionEvent实例

当单击一个按钮时,传递给JButton构造函数的初始字符串将是字符串的值,所以如果:

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

单击按钮时,选项将等于“文件名”。

注意我的类名为EventListener。