我有一个框架和一个panel.Permanently我删除面板并添加另一个panel.After添加新面板我需要JTextField来获取focused.How我可以这样做吗?
我尝试了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());
}
}发布于 2013-04-27 04:19:15
调用panel.requestFocus()试图将焦点放在容器本身,而不是它的任何子组件上。
将组件添加到JFrame后,在JTextField上使用requestFocusInWindow。在MyPanel中添加一个公共方法来调用此方法。
避免使用requestFocus。从docs
requestFocus是不受欢迎的,因为它试图将焦点放在组件的窗口上,但这并不总是可行的。从JDK1.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);
}
}发布于 2013-04-27 04:18:09
将这样的方法添加到MyPanel中:
public void gainFocus() {
tf.requestFocus();
}从main方法调用它,或者在任何需要它的地方调用它。
发布于 2013-04-27 04:18:22
您需要一个方法来从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();https://stackoverflow.com/questions/16244349
复制相似问题