日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本文介紹了使用Robot類Java按鍵按下特殊字符的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我正在編寫一個簡單地重新鍵入數據文件中的文本的程序。該程序一直有效,直到它命中第一個特殊字符。下面是一個例子:

數據文件

Hey what is up?

我得到的

Hey what is up (throws illegal argument exception)

以下是我的代碼:


 public static void KeyPresser() throws FileNotFoundException, AWTException {
        Robot robot = new Robot();
        Scanner file = new Scanner(new File("script.dat"));
        while(file.hasNext()) {
            String word = file.nextLine();
            for(int i = 0;i<word.length();i++) {
                char c = word.charAt(i);
                if (Character.isUpperCase(c)) {
                    robot.keyPress(KeyEvent.VK_SHIFT);
                }

                robot.keyPress(Character.toUpperCase(c));
                robot.keyRelease(Character.toUpperCase(c));

                if (Character.isUpperCase(c)) {
                    robot.keyRelease(KeyEvent.VK_SHIFT);
                }
               if(c=='?') {
                   robot.keyPress(KeyEvent.VK_SHIFT);
                   robot.keyPress(KeyEvent.VK_SLASH);
                   robot.keyRelease(KeyEvent.VK_SLASH);
                   robot.keyRelease(KeyEvent.VK_SHIFT);
               }

            }

    }

        }

它會輸入字母,而不是特殊字符嗎?我是不是要用一個很長的開關密碼?或者,有沒有簡單的辦法來解決這個問題?如您所知,我已經嘗試使用

                  if(c=='?') {
                   robot.keyPress(KeyEvent.VK_SHIFT);
                   robot.keyPress(KeyEvent.VK_SLASH);
                   robot.keyRelease(KeyEvent.VK_SLASH);
                   robot.keyRelease(KeyEvent.VK_SHIFT); 
}

但這不起作用,我該怎么辦?

推薦答案

我正在編寫一個簡單地重新鍵入數據文件中的文本的程序

為什么要使用Robot重新鍵入文本?為什么不能直接將文本插入到文本組件的文檔中。

我必須使用長的切換代碼嗎?

您可以使用HashMap來映射需要使用常規鍵進行移位的鍵:

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

public class RobotString extends JPanel
{
    private static HashMap<Character, Character> keyMap = new HashMap<>();

    private JTextField original;
    private JTextField copy;


    public RobotString()
    {
        setLayout( new BorderLayout() );

        original = new JTextField(10);
        add(original, BorderLayout.PAGE_START);

        JButton button = new JButton("Use Robot");
        add(button, BorderLayout.CENTER);
        button.addActionListener((e) -> invokeRobot() );

        copy = new JTextField(10);
        add(copy, BorderLayout.PAGE_END);

        //  Create mapping of keys

        keyMap.put('!', '1');
        keyMap.put('@', '2');
        keyMap.put('#', '3');
        keyMap.put(':', ';');
        keyMap.put('?', '/');
    }

    private void invokeRobot()
    {
        copy.requestFocusInWindow();
        copy.setText( "" );

        try
        {
            Robot robot = new Robot();

            char[] letters = original.getText().toCharArray();

            for(char letter: letters)
            {
                boolean shiftRequired = false;
                Character value = keyMap.get(letter);

                if (value != null)
                {
                    shiftRequired = true;
                    letter = value;
                }
                else if (Character.isUpperCase(letter))
                {
                    shiftRequired = true;
                }

                int keyCode = KeyEvent.getExtendedKeyCodeForChar( letter );

                if (shiftRequired)
                    robot.keyPress(java.awt.event.KeyEvent.VK_SHIFT);

                robot.keyPress( keyCode );
                robot.keyRelease( keyCode );

                if (shiftRequired)
                    robot.keyRelease(java.awt.event.KeyEvent.VK_SHIFT);
            }
        }
        catch(Exception e) { e.printStackTrace(); }
    }

    private static void createAndShowGUI()
    {
        JFrame frame = new JFrame("SSCCE");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new RobotString());
        frame.pack();
        frame.setLocationByPlatform( true );
        frame.setVisible( true );
    }

    public static void main(String[] args) throws Exception
    {
        java.awt.EventQueue.invokeLater( () -> createAndShowGUI() );
    }
}

只需在頂部文本字段中鍵入文本字符串,然后單擊按鈕即可。請注意,它只支持幾個特殊字符。
但請注意,這不是一個可靠的解決方案,因為映射依賴于鍵盤。

我現在知道為所有鍵盤提供通用解決方案的方法。

這篇關于使用Robot類Java按鍵按下特殊字符的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,

分享到:
標簽:Java Robot 按下 按鍵 特殊字符
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定