最近在做一个模拟中文输入的application程序.
在中间要用到 ctrl+SPACE,请问,怎么做才能实现ctrl+SPACE,怎么才能与其它的按下单一的键进行区别开来,
,还有一个小问题是,怎么来从键盘事件中捕获中文呢?
急......
[此贴子已经被作者于2007-2-6 17:44:45编辑过]
最近在做一个模拟中文输入的application程序.
在中间要用到 ctrl+SPACE,请问,怎么做才能实现ctrl+SPACE,怎么才能与其它的按下单一的键进行区别开来,
,还有一个小问题是,怎么来从键盘事件中捕获中文呢?
急......
[此贴子已经被作者于2007-2-6 17:44:45编辑过]
up.
没做成功.请大家帮一下.
代码如下.
package jdialog_test_extends;
/*********************************************
*author @scoladi
*JDialog_test JDialog_test_extends.java
**********************************************/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class JDialog_test_extends extends JDialog implements KeyListener
{
JLabel about;
JTextField jtf;//英文下进行输入
char input;
boolean flag=false;
public JDialog_test_extends() {
this.setTitle("对话使用.测试");
about = new JLabel("JDialog使用方法测试");
about.setHorizontalAlignment(SwingConstants.CENTER);
this.getContentPane().add(about, BorderLayout.NORTH);//加入第一个组件
this.addWindowListener(new WindowAdapter()
{ /**********************/
public void windowClosing(WindowEvent e)//重写了窗口事件. 是为了能使整个进程都停下.
{ /**********************/
dispose();
System.exit(0);
}
});
JDialog.setDefaultLookAndFeelDecorated(true);//static mothed
jtf =new JTextField(10);//10 columns
this.getContentPane().add(jtf, BorderLayout.SOUTH);//加入第二个组件
jtf.addKeyListener(this);
}
public static void main(String[] args) {
JDialog_test_extends mm=new JDialog_test_extends();
mm.setBounds(400,400,100,80);
mm.pack();
mm.show();
}
public void keyPressed(KeyEvent e)
{
if(e.getKeyChar()==KeyEvent.VK_SPACE)//空格键的判断
{
/**********************/
dispose(); //通过这种方式进行,达到空格键退出的操作.
System.exit(0);//把dispose()放于此能更好的退出.
} /**********************/
else if(e.getModifiersEx()==(e.CTRL_DOWN_MASK+e.VK_SPACE ))
{
about.setText("测试 进入输入法.");
flag=true;//用来设置其输入状态的标记.
}
else
{
if(flag==true) //用于字符串的输入方法
{
about.setText("进入flag=true测试");
flag=false;
}
else //if(e.getKeyChar()!=)
{ //专门用于字符输入的方法.
String sti_chr; /*************************/
sti_chr=Character.toString(e.getKeyChar());//格式转化
about.setText(sti_chr); /*************************/
}
}
}
public void keyReleased(KeyEvent e)
{
}
public void keyTyped(KeyEvent e)
{
}
}
无法捕获ctrl+space键,且,中文无法让其展示到标签上,请帮看下.谢谢.
e.getModifiersEx()==(e.CTRL_DOWN_MASK+e.VK_SPACE )
这个不是这样子用滴~
应该这样:
if(e.getKeyChar()==KeyEvent.VK_SPACE){
if((e.getModifiers()&e.CTRL_DOWN_MASK)==e.CTRL_DOWN_MASK) //在按下CTRL键的情况下按下SPACE键
else //一般情况
}
另外,楼上那样子是捕获不了中文输入滴.
我说过,想要捕获中文输入,可以考虑InputMethodListener,KeyEvent里面是没有中文输入信息滴.
.
我看楼主的目的就是想获取输入法输入的字符串吧,给个现成程序代码吧:
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import java.text.*;
/**
*捕获输入法中的输入
*@author: [url=http://eastsun.javaeye.com]Eastsun[/url]
*/public class CaptureInput extends JFrame{
public CaptureInput(){
super(\"捕获输入法输入\");
final JTextField textField =new JTextField(40);
final JTextArea textArea = new JTextArea(\"输入的字符串:\n\",10,40);
textArea.setEditable(false);
textArea.setLineWrap(true);
textField.addInputMethodListener(new InputMethodListener(){
public void inputMethodTextChanged(InputMethodEvent e){
CharacterIterator iter =e.getText();
for(char c =iter.first();c !=CharacterIterator.DONE; c=iter.next()) textArea.append(\"\"+c);
}
public void caretPositionChanged(InputMethodEvent e){}
});
getContentPane().add(textField,BorderLayout.NORTH);
getContentPane().add(textArea,BorderLayout.SOUTH);
pack();
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args){
new CaptureInput();
}
}
[此贴子已经被作者于2007-2-9 19:15:22编辑过]