私は Google Wave を使用しており、実際にエンター キーを押す前にメッセージを送信する機能をエミュレートしたいと考えています。
C関数に相当するJavaはあります_getch()
か?
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 を使用します)。
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) {
}
}
}
最初はSystem.in.read()を考えましたが、Enterキーを押さずに入力を取得する必要があります。これには、ネイティブコンソールの相互作用が必要です(コンソールはシステムごとに異なります)。
したがって、答えは「いいえ、直接の類似物はありません」です。
Java には getch に相当するものはありません。GUI コンポーネントを作成し、keyEvent リスナーをバインドすることもできます。
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)
{
}
}
}
}