7

私は Google Wave を使用しており、実際にエンター キーを押す前にメッセージを送信する機能をエミュレートしたいと考えています。

C関数に相当するJavaはあります_getch()か?

4

7 に答える 7

5

JLine ライブラリの ConsoleReader.readVirtualKey() メソッドを使用できます。http://jline.sourceforge.net/apidocs/jline/ConsoleReader.html#readVirtualKey()を参照してください。

サードパーティのライブラリを使用したくない場合、および Mac OS X または UNIX を使用している場合は、JLine が個々の文字を読み取るために使用するのと同じトリックを利用できます。コマンド「stty を実行するだけです。プログラムを実行する前に -icanon min 1" を実行すると、System.in は行バッファリングされなくなり、System.in.read() を使用して個々の文字を取得できます。残念ながら、このトリックは Windows では機能しないため、ネイティブ ライブラリを使用する必要があります (または単に JLine を使用します)。

于 2009-12-10T08:56:20.470 に答える
2

Cの「_getch()」と同等のコードを見つけました


public static void getCh() {  
        final JFrame frame = new JFrame();  
        synchronized (frame) {  
            frame.setUndecorated(true);  
            frame.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);  
            frame.addKeyListener(new KeyListener() {
                @Override 
                public void keyPressed(KeyEvent e) {  
                    synchronized (frame) {  
                        frame.setVisible(false);  
                        frame.dispose();  
                        frame.notify();  
                    }  
                }  
                @Override 
                public void keyReleased(KeyEvent e) {  
                }  
                @Override 
                public void keyTyped(KeyEvent e) {  
                }  
            });  
            frame.setVisible(true);  
            try {  
                frame.wait();  
            } catch (InterruptedException e1) {  
            }  
        }  
    }
于 2012-04-12T07:07:15.750 に答える
0

最初はSystem.in.read()を考えましたが、Enterキーを押さずに入力を取得する必要があります。これには、ネイティブコンソールの相互作用が必要です(コンソールはシステムごとに異なります)。

したがって、答えは「いいえ、直接の類似物はありません」です。

于 2009-12-08T02:04:54.223 に答える
0

Java には getch に相当するものはありません。GUI コンポーネントを作成し、keyEvent リスナーをバインドすることもできます。

于 2009-12-08T02:10:07.113 に答える
-1

Cのgetch()関数のJavaカスタムメソッド



import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import javax.swing.*;

class getch
{
    public static void getCh()
    {  
        final JFrame frame = new JFrame();  
        synchronized(frame)
        {  
            frame.setUndecorated(true);  
            frame.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);  
            frame.addKeyListener(new KeyListener()
            {  
                public void keyPressed(KeyEvent e)
                {  
                    synchronized(frame)
                    {  
                        frame.setVisible(false);  
                        frame.dispose();  
                        frame.notify();  
                    }  
                }  

                public void keyReleased(KeyEvent e)
                {  
                }  

                public void keyTyped(KeyEvent e)
                {  
                }  
            });
            frame.setVisible(true);  
            try
            {  
                frame.wait();  
            }
            catch(InterruptedException e1)
            {  
            }  
        }  
    }
}
于 2013-10-02T21:07:20.640 に答える