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));
}
}
}
}
keyPressed。e.getKeyChar():獲取字符,組合鍵(如 Ctrl+C)返回 CHAR_UNDEFINED 需過濾。setSize 和 setVisible(true),否則組件不顯示。ActionListener 統一處理工具欄按鈕事件。鍵盤記錄屬於敏感行為,僅用於教學或經用戶授權的合法場景,嚴禁用於竊取隱私。