[英]JTextField focus
我有一个框架和一个面板。永久地我删除面板并添加另一个面板。添加一个新面板后,我需要JTextField来集中注意力。我怎么能这样做?
我尝试了panel.requestFocus()
方法,但它没有用。
示例代码:
public class Test{
public static void main(String[] args){
JFrame frame = new JFrame();
// ... frame options
// MyPanel extends JPanel
// and has a JTextField
contentPane.add(new MyPanel());
// Permanently I need to add another panel
contentPane.removeAll();
contentPane.add(new MyPanel());
}
}
调用panel.requestFocus()
尝试将焦点放在容器本身而不是其任何子组件上。
将组件添加到JFrame
后,在JTextField
上使用requestFocusInWindow 。 在MyPanel
添加一个公共方法来调用此方法。
避免使用requestFocus
。 来自文档 :
不鼓励requestFocus,因为它试图将焦点放在组件的窗口上,这并不总是可行的。 从JDK 1.4开始,您应该使用requestFocusInWindow方法,该方法不会尝试使组件的窗口集中。
public class Test {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame("Focus JTextField");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MyPanel myPanel = new MyPanel();
frame.add(myPanel);
frame.setVisible(true);
frame.pack();
myPanel.focusTextField();
}
});
}
}
class MyPanel extends JPanel {
private JTextField textField;
public MyPanel() {
textField = new JTextField(20);
add(textField);
}
public void focusTextField() {
textField.requestFocusInWindow();
}
@Override
public Dimension getPreferredSize() {
return new Dimension(300, 100);
}
}
将这样的方法添加到MyPanel:
public void gainFocus() {
tf.requestFocus();
}
无论何时需要聚焦,都可以从main方法或其他地方调用它。
您将需要一个方法来从MyPanel
获取TextField,如getTextField
,或者只是直接关注TextField的方法。 这些方法必须在MyPanel
类中。
示例方法:
public class MyPanel extends JPanel {
private JTextField textField;
//your code here
public void getTextFieldFocus() {
textField.requestFocus();
}
}
然后在需要聚焦时调用此getTextFieldFocus
方法。
另外,如果使用getTextField方法从MyPanel类中提取TextField,则在需要焦点时调用它:
panel.getTextField().requestFocus();
采用。 textfield.setText( “”); 当你需要获得焦点或尝试类似的东西时,你会把你的控制权带到你的领域
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.