现在问题可以总结为:如何在swing里当用户按下enter键时相当于用户按下了Tab键. 现在可以用以下方法实现: import javax.swing.*; import java.awt.*; import javax.swing.event.*; import java.awt.event.*;class F extends JFrame{ JTextField a,b; JTextPane text; public F(){ Container cp = getContentPane(); cp.setLayout(new BorderLayout()); a = new JTextField("one"); b = new JTextField("two"); a.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ b.requestFocus(true); } }); cp.add(a,BorderLayout.NORTH); cp.add(b,BorderLayout.CENTER); } public static void main(String[] args){ F frame = new F(); frame.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); frame.setSize(200,200); frame.setVisible(true); } }但这种方法的不好之处在于,如果用许多jTextField那真的要累死. 请问谁有更好的方法实现相同的功能吗.
import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.KeyboardFocusManager; import java.awt.event.KeyEvent; import java.util.HashSet; import java.util.Set;import javax.swing.*;public class FocusTraversalKeyTest { public static void main(String[] args) { JPanel p = new JPanel(new GridLayout(0, 3, 5, 5)); for (int i = 0; i < 30; i++) { p.add(new JTextField(10)); }
Set forwardKeySet = new HashSet(); forwardKeySet.add(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0)); KeyboardFocusManager.getCurrentKeyboardFocusManager().setDefaultFocusTraversalKeys( KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, forwardKeySet);
Set backwardKeySet = new HashSet(); backwardKeySet.add(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0)); KeyboardFocusManager.getCurrentKeyboardFocusManager().setDefaultFocusTraversalKeys( KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, backwardKeySet);// p.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, // forwardKeySet); // p.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, // backwardKeySet); JFrame f = new JFrame(); f.getContentPane().add(p, BorderLayout.CENTER); f.getContentPane().add(new JLabel("使用上下箭头切换焦点"), BorderLayout.NORTH); f.pack(); f.setLocationRelativeTo(null); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } } 使用Enter键也可以,不过这样的话文本框就收不到actionPerformed事件了
To:prok(好地都让猪拱了) 什么意思到底怎么做呀.有谁知道就请告诉小弟一下,拜托了.
有一个JTextArea包含一段文本,
还有一个JButton会关闭程序,假定你当前焦点再JTextArea里,正在编辑第2行,你按下键,那应该是到第三行还是到button呢?
这本身就违背了最基本的UI设计啊,现在大家都在向CUA靠拢,你这样....
碰到是上下键时,new mouseevent,
然后用component.dispa...Eve方法
相当于上下键事件变为了tab或者shilt +tab键事件
现在可以用以下方法实现:
import javax.swing.*;
import java.awt.*;
import javax.swing.event.*;
import java.awt.event.*;class F extends JFrame{
JTextField a,b;
JTextPane text;
public F(){
Container cp = getContentPane();
cp.setLayout(new BorderLayout());
a = new JTextField("one");
b = new JTextField("two");
a.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
b.requestFocus(true);
}
});
cp.add(a,BorderLayout.NORTH);
cp.add(b,BorderLayout.CENTER);
} public static void main(String[] args){
F frame = new F();
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
frame.setSize(200,200);
frame.setVisible(true);
}
}但这种方法的不好之处在于,如果用许多jTextField那真的要累死.
请问谁有更好的方法实现相同的功能吗.
import java.awt.GridLayout;
import java.awt.KeyboardFocusManager;
import java.awt.event.KeyEvent;
import java.util.HashSet;
import java.util.Set;import javax.swing.*;public class FocusTraversalKeyTest
{
public static void main(String[] args)
{
JPanel p = new JPanel(new GridLayout(0, 3, 5, 5));
for (int i = 0; i < 30; i++) {
p.add(new JTextField(10));
}
Set forwardKeySet = new HashSet();
forwardKeySet.add(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0));
KeyboardFocusManager.getCurrentKeyboardFocusManager().setDefaultFocusTraversalKeys(
KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS,
forwardKeySet);
Set backwardKeySet = new HashSet();
backwardKeySet.add(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0));
KeyboardFocusManager.getCurrentKeyboardFocusManager().setDefaultFocusTraversalKeys(
KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS,
backwardKeySet);// p.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS,
// forwardKeySet);
// p.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS,
// backwardKeySet); JFrame f = new JFrame();
f.getContentPane().add(p, BorderLayout.CENTER);
f.getContentPane().add(new JLabel("使用上下箭头切换焦点"), BorderLayout.NORTH);
f.pack();
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
使用Enter键也可以,不过这样的话文本框就收不到actionPerformed事件了
結貼