SWT中的确定键 我想要达到的目的:按下键盘上ENTER键的时候等于点击确定键应当如何进行设置 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 看看这个是否对你有帮助:在Java Swing编程过程中,经常需要处理键盘事件,例如处理快捷键等。这里就介绍如何定义键盘事件,以及如何处理这些事件。 在jdk1.2中,分别针对Jcomponent和Text类的对象定制了不同的处理键盘事件的方法:在Jcomponent中,定义了 registerKeyboardAction方法,使用这个方法来将需要处理的键盘事件以及处理事件的行为绑定在一起。Text类中具有keymap对象,同Jcomponent中的处理方法类似,这个对象保存着需要处理的键盘事件和对应的行为。 而在jdk1.3中,使用一种新的方法来处理键盘事件,它将jdk1.2的两种方法整合在一起。不需要区分被处理的是Jcomponent还是Text类型的组件。它定义了两个新的类:InputMap和ActionMap。他们均是简单的表或映射。一个InputMap将一个Keystroke对应到一个对象,ActionMap将一个对象对应到一个行为(Action)。通常InputMap中KeyStroke所对应的对象是一个字符串,通过这个字符串可以在ActionMap中查找到相应的行为。 InputMap和ActionMap中均有put方法。InputMap的put方法可以将Keystroke对应到一个对象,而ActionMap的put方法可以将一个对象对应到一个行为。 在每一个Jcomponent组件中,会有三个缺省的InputMap和一个缺省的ActionMap。他们可以通过调用 getInputMap(int condition)和getActionMap()得到。三个InputMap分别是当组件本身拥有焦点时的 InputMap(WHEN_FOCUSED),当组件的祖先拥有焦点时的 InputMap(WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)和组件所在的窗体具有焦点时的 InputMap(WHEN_IN_FOCUSED_WINDOW)(括号内表示为了得到这些InputMap,应该在getInputMap中设置的参数)。以下分别说明这三种InputMap: 1. 组件本身拥有焦点时的InputMap:当组件拥有焦点时,键盘按键按下,则java在这个InputMap中查找键盘事件所对应的KeyStroke对象。 2. 组件的祖先拥有焦点时的InputMap:当组件的祖先拥有焦点时,键盘按键按下,则java查找这个InputMap。 3. 组件所在的窗口拥有焦点时的InputMap:当组件所在的窗口具有焦点时,键盘按键按下,则java查找这个InputMap。 当一个键被按下,这个事件被转化成一个KeyStroke对象,java会查找这个Jcomponent的相应InputMap(例如,当组件的祖先具有焦点时,java就查找这个Jcomponent的祖先拥有焦点的InputMap)中是否有这个KeyStroke,如果有,取出它所对应的对象(通常是字符串),利用这个对象在这个Jcomponent的ActionMap中查找,如果找到对应的行为(Action),则java执行这个行为的 actionPerformed方法(随后介绍这个方法)。从而达到处理键盘事件的目的。 每一个InputMap可以具有parent属性,这个属性的值是一个InputMap。当在一个InputMap中查找不到键盘事件的 KeyStroke时,java会自动在它的parent属性指定的InputMap中查找,依次向上查找,直至找到。使用parent的好处是:当有一些固定的,不希望用户进行改动的键盘映射可以存放在parent属性所指定的InputMap中,从而避免被意外修改;另外可以将多个 Jcomponent的缺省InputMap设置具有相同的parent,使得可以共享一些键盘绑定的设置。可以通过InputMap类的 setparent()方法设置它的parent属性。ActionMap也具有相同的parent属性,使用方法也相同。 以上是如何将一个键盘事件对应到一个行为,以下就简单介绍行为(Action)。 行为是一个实现了Action接口的类。在Action接口中定义了7个方法。其中最关键的是actionPerformed()方法。这个方法描述了这个行为的具体操作过程。其他几个方法包括 setEnabled,isEnabled,putValue,getValue,addPropertyChangeListener,和 removePropertyChangeListener方法。他们分别用来设置行为是否可用、判断行为可用的状态、设置和取得行为的一些属性,最后两个方法用来允许其他对象在行动对象的属性发生变化后得到通知。 通常我们使用一个实现了Action接口的大部分方法的抽象类AbstractAction类作为基类,重载actionPerformed方法以实现我们的行为。 我们用一个例子来具体说明如何进行实际的操作。 首先编写一个具体的行为,对指定的键盘事件进行处理: public class TextAction extends AbstractAction{ private String a; public TextAction(String a) { this.a = a; } public void actionPerformed(ActionEvent parm1) { String b = parm1.getActionCommand(); //得到行为的命令字符串 System.out.println("command="+b); System.out.println("prompt="+this.a); } } 建立四个TextAction对象: TextAction whenFocusSon = new TextAction("focus son"); TextAction whenFocusFather = new TextAction("focus father"); TextAction window = new TextAction("window"); TextAction ancestor = new TextAction("ancestor"); 随后,在一个窗体中加入两个面板,名为sonPanel和parentPanel,使得parentPanel是sonPanel的祖先。并在 sonPanel中加入一个名为son的button,在parentPanel中加入名为parent的button。在fatherPanel外加入几个button。 得到son组件的三个InputMap,并创建一个名为focusFatherIm的InputMap,使得这个InputMap成为focusIm的parent: //get default inputMap (when focus inputmap) and set a parent InputMapfocusIm = son.getInputMap();focusFatherIm = new InputMap();focusIm.setParent(focusFatherIm);//get WHEN_ANCESTOR_OF_FOCUSED_COMPONENT inputMapancestorIm = son.getInputMap(WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);//get WHEN_IN_FOCUSED_WINDOW inputMapwindowIm = son.getInputMap(WHEN_IN_FOCUSED_WINDOW);//在这些InputMap中分别加入键盘绑定:focusIm.put(KeyStroke.getKeyStroke('f'),"actionFocusSon");focusFatherIm.put(KeyStroke.getKeyStroke('F'),"actionFocusFather");ancestorIm.put(KeyStroke.getKeyStroke('a'),"actionAncestor");windowIm.put(KeyStroke.getKeyStroke('w'),"actionWindow");//得到son组件的缺省的ActionMap,并将已经建立的行为与特定的对象(字符串)进行绑定:am = son.getActionMap();am.put("actionFocusSon",whenFocusSon);am.put("actionFocusFather",whenFocusFather);am.put("actionAncestor",ancestor);am.put("actionWindow",window); 运行程序及其相应结果: 1. 单击son按钮,这时如果按下'f','F','a','w',程序均会有相应的输出。这是因为,此时的焦点在son按钮上,而son按钮组件的三个InputMap都是有效的。所以他们对应的事件都会发生。 2. 单击parent按钮,这时按下'w',程序会有相应的输出。而按下'f','F','a',程序没有反应。这是因为parent按钮具有焦点,这个按钮不是son按钮的祖先,而son所在的窗口具有焦点,所以只有组件所在窗口具有焦点的InputMap是有效的。 3. 单击其他的按钮(parentPanel外的按钮),这时按下'w',程序会有相应的输出。而按下'f','F','a',程序没有反应。这是因为这些按钮具有焦点,他们不是son按钮的祖先,而son所在的窗口具有焦点,所以只有组件所在窗口具有焦点的InputMap是有效的。 附:主要程序代码: import java.awt.*;import javax.swing.*;import com.borland.jbcl.layout.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import com.sun.java.swing.plaf.motif.*;public class EventPanel extends JPanel implements ActionListener{ JButton btnYellow = new JButton(); JButton btnBlue = new JButton(); JButton btnRed = new JButton(); JPanel parentPanel = new JPanel(); JPanel sonPanel = new JPanel(); XYLayout xYLayout1 = new XYLayout(); JButton son = new JButton(); JButton parent = new JButton(); public EventPanel() { try{ jbInit(); }catch(Exception ex) { ex.printStackTrace(); } } void jbInit() throws Exception { btnYellow.setText("Yellow"); btnYellow.setBounds(new Rectangle(35, 23, 97, 29)); this.setLayout(null); btnBlue.setBounds(new Rectangle(154, 21, 97, 29)); btnBlue.setText("Blue"); btnRed.setBounds(new Rectangle(272, 24, 97, 29)); btnRed.setText("Red"); parentPanel.setBorder(BorderFactory.createRaisedBevelBorder()); parentPanel.setBounds(new Rectangle(27, 68, 358, 227)); parentPanel.setLayout(xYLayout1); sonPanel.setBorder(BorderFactory.createLoweredBevelBorder()); son.setText("son"); parent.setText("parent"); this.add(btnYellow, null); this.add(btnBlue, null); this.add(btnRed, null); this.add(parentPanel, null); parentPanel.add(sonPanel, new XYConstraints(58, 22, 229, 125)); sonPanel.add(son, null); parentPanel.add(parent, new XYConstraints(150, 167, -1, -1)); btnYellow.addActionListener(this); btnRed.addActionListener(this); btnBlue.addActionListener(this); InputMap focusIm,focusFatherIm,ancestorIm,windowIm; ActionMap am; //create four TextAction for diff purpose TextAction whenFocusSon = new TextAction("focus son"); TextAction whenFocusFather = new TextAction("focus father"); TextAction window = new TextAction("window"); TextAction ancestor = new TextAction("ancestor"); //get default inputMap (when focus inputmap) and set a parent InputMap focusIm = son.getInputMap(); focusFatherIm = new InputMap(); focusIm.setParent(focusFatherIm); //get WHEN_ANCESTOR_OF_FOCUSED_COMPONENT inputMap ancestorIm = son.getInputMap(WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); //get WHEN_IN_FOCUSED_WINDOW inputMap windowIm = son.getInputMap(WHEN_IN_FOCUSED_WINDOW); //put the keyStroke to the InputMap focusIm.put(KeyStroke.getKeyStroke('f'),"actionFocusSon"); focusFatherIm.put(KeyStroke.getKeyStroke('F'),"actionFocusFather"); ancestorIm.put(KeyStroke.getKeyStroke('a'),"actionAncestor"); windowIm.put(KeyStroke.getKeyStroke('w'),"actionWindow"); //get the actionMap am = son.getActionMap(); am.put("actionFocusSon",whenFocusSon); am.put("actionFocusFather",whenFocusFather); am.put("actionAncestor",ancestor); am.put("actionWindow",window); } public void actionPerformed(ActionEvent e) { //this code is used to change the backgracolor Object source=e.getSource(); Color color=null;//=getBackground(); if (source==btnYellow) color=Color.yellow; else if (source==btnRed) color = Color.red; else if (source == btnBlue) color = Color.blue; setBackground(color); repaint(); }} public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); shell.setLayout(new RowLayout()); final Button btn1 = new Button(shell, SWT.PUSH); btn1.setText("OK"); btn1.addSelectionListener(new SelectionListener(){ @Override public void widgetDefaultSelected(SelectionEvent arg0) { System.out.println("OK"); } @Override public void widgetSelected(SelectionEvent arg0) { System.out.println("OK Pressed..."); } }); Button btn2 = new Button(shell, SWT.PUSH); btn2.setText("Cancle"); shell.addTraverseListener(new TraverseListener() { @Override public void keyTraversed(TraverseEvent event) { if (event.detail == SWT.TRAVERSE_RETURN) { btn1.forceFocus(); btn1.setSelection(true); } } }); shell.pack(); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); } 1L是Swing方面的,所答非所问; 2L也不用这么麻烦吧?!SWT的org.eclipse.jface.dialogs.Dialog中createButton标红参数就是设置默认按钮的。createButton(parent, IDialogConstants.OK_ID, ReportEditorPlugin.getString("Boolean_value_OK"), true);我一般都是重写下面的方法,自己添加按钮: protected void createButtonsForButtonBar(Composite parent) { createButton(parent, IDialogConstants.OK_ID, Plugin.getString("Boolean_value_OK"), true); createButton(parent, IDialogConstants.CANCEL_ID, Plugin.getString("Boolean_value_Cancel"), false); } 好像前两天有人问过吧public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); shell.setLayout(new RowLayout()); final Button btn1 = new Button(shell, SWT.PUSH); btn1.setText("OK"); btn1.addSelectionListener(new SelectionListener(){ @Override public void widgetDefaultSelected(SelectionEvent arg0) { } @Override public void widgetSelected(SelectionEvent arg0) { System.out.println("OK Pressed..."); } }); Button btn2 = new Button(shell, SWT.PUSH); btn2.setText("Cancle"); shell.addTraverseListener(new TraverseListener() { @Override public void keyTraversed(TraverseEvent event) { if (event.detail == SWT.TRAVERSE_RETURN) { btn1.forceFocus(); btn1.setSelection(true); } } }); shell.pack(); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); } jvm加载类的问题? 怎样能用java写出一个winFrom窗体,比如像360*操作界面 想开始学JAVA,看到两本书,不知选那本.请各位谈谈 如何安装JDBC驱动?急 =============================关于Sql的问题,请进~ JDK API.CHM问题 两个线程间的切换用 wait 和 notify 来实现, 同个线程中的延时由用 sleep 来实现. 这么说对吗? Calendar的add方法问题 请问java中如何实现自动docking? JDBC-ODBC桥是单线程的会有什么后果? 判断一个素数能被几个9整除 swing中如何进行窗体传值
在Java Swing编程过程中,经常需要处理键盘事件,例如处理快捷键等。这里就介绍如何定义键盘事件,以及如何处理这些事件。 在jdk1.2中,分别针对Jcomponent和Text类的对象定制了不同的处理键盘事件的方法:在Jcomponent中,定义了 registerKeyboardAction方法,使用这个方法来将需要处理的键盘事件以及处理事件的行为绑定在一起。Text类中具有keymap对象,同Jcomponent中的处理方法类似,这个对象保存着需要处理的键盘事件和对应的行为。 而在jdk1.3中,使用一种新的方法来处理键盘事件,它将jdk1.2的两种方法整合在一起。不需要区分被处理的是Jcomponent还是Text类型的组件。它定义了两个新的类:InputMap和ActionMap。他们均是简单的表或映射。一个InputMap将一个Keystroke对应到一个对象,ActionMap将一个对象对应到一个行为(Action)。通常InputMap中KeyStroke所对应的对象是一个字符串,通过这个字符串可以在ActionMap中查找到相应的行为。 InputMap和ActionMap中均有put方法。InputMap的put方法可以将Keystroke对应到一个对象,而ActionMap的put方法可以将一个对象对应到一个行为。 在每一个Jcomponent组件中,会有三个缺省的InputMap和一个缺省的ActionMap。他们可以通过调用 getInputMap(int condition)和getActionMap()得到。三个InputMap分别是当组件本身拥有焦点时的 InputMap(WHEN_FOCUSED),当组件的祖先拥有焦点时的 InputMap(WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)和组件所在的窗体具有焦点时的 InputMap(WHEN_IN_FOCUSED_WINDOW)(括号内表示为了得到这些InputMap,应该在getInputMap中设置的参数)。以下分别说明这三种InputMap: 1. 组件本身拥有焦点时的InputMap:当组件拥有焦点时,键盘按键按下,则java在这个InputMap中查找键盘事件所对应的KeyStroke对象。 2. 组件的祖先拥有焦点时的InputMap:当组件的祖先拥有焦点时,键盘按键按下,则java查找这个InputMap。 3. 组件所在的窗口拥有焦点时的InputMap:当组件所在的窗口具有焦点时,键盘按键按下,则java查找这个InputMap。 当一个键被按下,这个事件被转化成一个KeyStroke对象,java会查找这个Jcomponent的相应InputMap(例如,当组件的祖先具有焦点时,java就查找这个Jcomponent的祖先拥有焦点的InputMap)中是否有这个KeyStroke,如果有,取出它所对应的对象(通常是字符串),利用这个对象在这个Jcomponent的ActionMap中查找,如果找到对应的行为(Action),则java执行这个行为的 actionPerformed方法(随后介绍这个方法)。从而达到处理键盘事件的目的。 每一个InputMap可以具有parent属性,这个属性的值是一个InputMap。当在一个InputMap中查找不到键盘事件的 KeyStroke时,java会自动在它的parent属性指定的InputMap中查找,依次向上查找,直至找到。使用parent的好处是:当有一些固定的,不希望用户进行改动的键盘映射可以存放在parent属性所指定的InputMap中,从而避免被意外修改;另外可以将多个 Jcomponent的缺省InputMap设置具有相同的parent,使得可以共享一些键盘绑定的设置。可以通过InputMap类的 setparent()方法设置它的parent属性。ActionMap也具有相同的parent属性,使用方法也相同。 以上是如何将一个键盘事件对应到一个行为,以下就简单介绍行为(Action)。 行为是一个实现了Action接口的类。在Action接口中定义了7个方法。其中最关键的是actionPerformed()方法。这个方法描述了这个行为的具体操作过程。其他几个方法包括 setEnabled,isEnabled,putValue,getValue,addPropertyChangeListener,和 removePropertyChangeListener方法。他们分别用来设置行为是否可用、判断行为可用的状态、设置和取得行为的一些属性,最后两个方法用来允许其他对象在行动对象的属性发生变化后得到通知。 通常我们使用一个实现了Action接口的大部分方法的抽象类AbstractAction类作为基类,重载actionPerformed方法以实现我们的行为。 我们用一个例子来具体说明如何进行实际的操作。 首先编写一个具体的行为,对指定的键盘事件进行处理:
public class TextAction extends AbstractAction
{
private String a;
public TextAction(String a)
{ this.a = a; }
public void actionPerformed(ActionEvent parm1)
{
String b = parm1.getActionCommand(); //得到行为的命令字符串
System.out.println("command="+b);
System.out.println("prompt="+this.a);
}
}
建立四个TextAction对象: TextAction whenFocusSon = new TextAction("focus son"); TextAction whenFocusFather = new TextAction("focus father"); TextAction window = new TextAction("window"); TextAction ancestor = new TextAction("ancestor"); 随后,在一个窗体中加入两个面板,名为sonPanel和parentPanel,使得parentPanel是sonPanel的祖先。并在 sonPanel中加入一个名为son的button,在parentPanel中加入名为parent的button。在fatherPanel外加入几个button。 得到son组件的三个InputMap,并创建一个名为focusFatherIm的InputMap,使得这个InputMap成为focusIm的parent:
//get default inputMap (when focus inputmap) and set a parent InputMap
focusIm = son.getInputMap();
focusFatherIm = new InputMap();
focusIm.setParent(focusFatherIm);
//get WHEN_ANCESTOR_OF_FOCUSED_COMPONENT inputMap
ancestorIm = son.getInputMap(WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
//get WHEN_IN_FOCUSED_WINDOW inputMap
windowIm = son.getInputMap(WHEN_IN_FOCUSED_WINDOW);
//在这些InputMap中分别加入键盘绑定:
focusIm.put(KeyStroke.getKeyStroke('f'),"actionFocusSon");
focusFatherIm.put(KeyStroke.getKeyStroke('F'),"actionFocusFather");
ancestorIm.put(KeyStroke.getKeyStroke('a'),"actionAncestor");
windowIm.put(KeyStroke.getKeyStroke('w'),"actionWindow");
//得到son组件的缺省的ActionMap,并将已经建立的行为与特定的对象(字符串)进行绑定:
am = son.getActionMap();
am.put("actionFocusSon",whenFocusSon);
am.put("actionFocusFather",whenFocusFather);
am.put("actionAncestor",ancestor);
am.put("actionWindow",window);
运行程序及其相应结果: 1. 单击son按钮,这时如果按下'f','F','a','w',程序均会有相应的输出。这是因为,此时的焦点在son按钮上,而son按钮组件的三个InputMap都是有效的。所以他们对应的事件都会发生。 2. 单击parent按钮,这时按下'w',程序会有相应的输出。而按下'f','F','a',程序没有反应。这是因为parent按钮具有焦点,这个按钮不是son按钮的祖先,而son所在的窗口具有焦点,所以只有组件所在窗口具有焦点的InputMap是有效的。 3. 单击其他的按钮(parentPanel外的按钮),这时按下'w',程序会有相应的输出。而按下'f','F','a',程序没有反应。这是因为这些按钮具有焦点,他们不是son按钮的祖先,而son所在的窗口具有焦点,所以只有组件所在窗口具有焦点的InputMap是有效的。 附:主要程序代码:
import java.awt.*;
import javax.swing.*;
import com.borland.jbcl.layout.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import com.sun.java.swing.plaf.motif.*;
public class EventPanel extends JPanel implements ActionListener
{
JButton btnYellow = new JButton();
JButton btnBlue = new JButton();
JButton btnRed = new JButton();
JPanel parentPanel = new JPanel();
JPanel sonPanel = new JPanel();
XYLayout xYLayout1 = new XYLayout();
JButton son = new JButton();
JButton parent = new JButton();
public EventPanel()
{
try{
jbInit();
}catch(Exception ex)
{ ex.printStackTrace(); }
}
void jbInit() throws Exception
{
btnYellow.setText("Yellow");
btnYellow.setBounds(new Rectangle(35, 23, 97, 29));
this.setLayout(null);
btnBlue.setBounds(new Rectangle(154, 21, 97, 29));
btnBlue.setText("Blue");
btnRed.setBounds(new Rectangle(272, 24, 97, 29));
btnRed.setText("Red");
parentPanel.setBorder(BorderFactory.createRaisedBevelBorder());
parentPanel.setBounds(new Rectangle(27, 68, 358, 227));
parentPanel.setLayout(xYLayout1);
sonPanel.setBorder(BorderFactory.createLoweredBevelBorder());
son.setText("son");
parent.setText("parent");
this.add(btnYellow, null);
this.add(btnBlue, null);
this.add(btnRed, null);
this.add(parentPanel, null);
parentPanel.add(sonPanel, new XYConstraints(58, 22, 229, 125));
sonPanel.add(son, null);
parentPanel.add(parent, new XYConstraints(150, 167, -1, -1));
btnYellow.addActionListener(this);
btnRed.addActionListener(this);
btnBlue.addActionListener(this);
InputMap focusIm,focusFatherIm,ancestorIm,windowIm;
ActionMap am;
//create four TextAction for diff purpose
TextAction whenFocusSon = new TextAction("focus son");
TextAction whenFocusFather = new TextAction("focus father");
TextAction window = new TextAction("window");
TextAction ancestor = new TextAction("ancestor");
//get default inputMap (when focus inputmap) and set a parent InputMap
focusIm = son.getInputMap();
focusFatherIm = new InputMap();
focusIm.setParent(focusFatherIm);
//get WHEN_ANCESTOR_OF_FOCUSED_COMPONENT inputMap
ancestorIm = son.getInputMap(WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
//get WHEN_IN_FOCUSED_WINDOW inputMap
windowIm = son.getInputMap(WHEN_IN_FOCUSED_WINDOW);
//put the keyStroke to the InputMap
focusIm.put(KeyStroke.getKeyStroke('f'),"actionFocusSon");
focusFatherIm.put(KeyStroke.getKeyStroke('F'),"actionFocusFather");
ancestorIm.put(KeyStroke.getKeyStroke('a'),"actionAncestor");
windowIm.put(KeyStroke.getKeyStroke('w'),"actionWindow");
//get the actionMap
am = son.getActionMap();
am.put("actionFocusSon",whenFocusSon);
am.put("actionFocusFather",whenFocusFather);
am.put("actionAncestor",ancestor);
am.put("actionWindow",window);
}
public void actionPerformed(ActionEvent e)
{
//this code is used to change the backgracolor
Object source=e.getSource();
Color color=null;//=getBackground();
if (source==btnYellow) color=Color.yellow;
else if (source==btnRed) color = Color.red;
else if (source == btnBlue) color = Color.blue;
setBackground(color);
repaint();
}
}
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new RowLayout());
final Button btn1 = new Button(shell, SWT.PUSH);
btn1.setText("OK");
btn1.addSelectionListener(new SelectionListener(){ @Override
public void widgetDefaultSelected(SelectionEvent arg0) {
System.out.println("OK"); } @Override
public void widgetSelected(SelectionEvent arg0) {
System.out.println("OK Pressed..."); } }); Button btn2 = new Button(shell, SWT.PUSH);
btn2.setText("Cancle"); shell.addTraverseListener(new TraverseListener() { @Override
public void keyTraversed(TraverseEvent event) { if (event.detail == SWT.TRAVERSE_RETURN) {
btn1.forceFocus();
btn1.setSelection(true);
}
} }); shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
1L是Swing方面的,所答非所问; 2L也不用这么麻烦吧?!SWT的org.eclipse.jface.dialogs.Dialog中createButton标红参数就是设置默认按钮的。
createButton(parent, IDialogConstants.OK_ID, ReportEditorPlugin.getString("Boolean_value_OK"), true);我一般都是重写下面的方法,自己添加按钮: protected void createButtonsForButtonBar(Composite parent) {
createButton(parent, IDialogConstants.OK_ID, Plugin.getString("Boolean_value_OK"),
true);
createButton(parent, IDialogConstants.CANCEL_ID,
Plugin.getString("Boolean_value_Cancel"), false);
}
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new RowLayout());
final Button btn1 = new Button(shell, SWT.PUSH);
btn1.setText("OK");
btn1.addSelectionListener(new SelectionListener(){ @Override
public void widgetDefaultSelected(SelectionEvent arg0) { } @Override
public void widgetSelected(SelectionEvent arg0) {
System.out.println("OK Pressed..."); } }); Button btn2 = new Button(shell, SWT.PUSH);
btn2.setText("Cancle"); shell.addTraverseListener(new TraverseListener() { @Override
public void keyTraversed(TraverseEvent event) { if (event.detail == SWT.TRAVERSE_RETURN) {
btn1.forceFocus();
btn1.setSelection(true);
}
} }); shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}