当前位置: 代码迷 >> Java相关 >> [求助]关于组合键的使用
  详细解决方案

[求助]关于组合键的使用

热度:169   发布时间:2007-02-06 17:44:00.0
[求助]关于组合键的使用

最近在做一个模拟中文输入的application程序.
在中间要用到 ctrl+SPACE,请问,怎么做才能实现ctrl+SPACE,怎么才能与其它的按下单一的键进行区别开来,
,还有一个小问题是,怎么来从键盘事件中捕获中文呢?
急......

[此贴子已经被作者于2007-2-6 17:44:45编辑过]

搜索更多相关的解决方案: SPACE  键盘  中文  application  

----------------解决方案--------------------------------------------------------
1.KeyEvent有个getModifiers()方法
2.键盘事件中不包含中文输入的信息,如果想捕获中文输入,可以考虑使用InputMethodListener
----------------解决方案--------------------------------------------------------
我试下.

----------------解决方案--------------------------------------------------------

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编辑过]


----------------解决方案--------------------------------------------------------
谢谢楼上的帮助,解决了.
真是谢谢你了.


----------------解决方案--------------------------------------------------------
  相关解决方案