首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 鍵盤監聽器鍵盤記錄器開發:Swing 界面實時顯示按鍵並支持保存到文件

     編輯:程式設計疑難解答

完整實現代碼

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class KeyBoardListener extends JFrame implements ActionListener {
    private JTextArea textReceiver;
    private JButton saveBtn;

    public KeyBoardListener() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setTitle("Keylogger");
        addKeyListener(new MyKeyListener());

        textReceiver = new JTextArea();
        textReceiver.setEditable(true);
        getContentPane().add(new JScrollPane(textReceiver));
        textReceiver.append("請通過鍵盤輸入信息,下面將會回顯您輸入的信息:");

        JToolBar toolBar = new JToolBar();
        getContentPane().add(toolBar, BorderLayout.SOUTH);
        saveBtn = new JButton("保存");
        saveBtn.addActionListener(this);
        toolBar.add(saveBtn);

        setSize(400, 400);
        setVisible(true);
    }

    public static void main(String[] args) {
        new KeyBoardListener();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if ("保存".equals(e.getActionCommand())) {
            String input = textReceiver.getText();
            try (FileOutputStream fos = new FileOutputStream("keylog.txt");
                 PrintStream ps = new PrintStream(fos)) {
                ps.print(input);
                JOptionPane.showMessageDialog(this, "保存成功!");
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }

    class MyKeyListener extends KeyAdapter {
        @Override
        public void keyPressed(KeyEvent e) {
            char c = e.getKeyChar();
            if (c != KeyEvent.CHAR_UNDEFINED) {
                textReceiver.append(String.valueOf(c));
            }
        }
    }
}

關鍵點解析

  1. KeyAdapter:適配器模式,只重寫需要的 keyPressed。
  2. e.getKeyChar():獲取字符,組合鍵(如 Ctrl+C)返回 CHAR_UNDEFINED 需過濾。
  3. JTextArea.append:線程安全(Swing 組件需在 EDT 操作,鍵盤事件本身在 EDT)。
  4. 窗體初始化順序:所有組件添加完畢後,最後調用 setSize 和 setVisible(true),否則組件不顯示。
  5. 保存功能:ActionListener 統一處理工具欄按鈕事件。

安全與合規提醒

鍵盤記錄屬於敏感行為,僅用於教學或經用戶授權的合法場景,嚴禁用於竊取隱私。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved