私はjTextfieldを持っています。フォームがロードされたときに、これにフォーカスを設定したいと思います。これどうやってするの?私はネットビーンズを使用しています。使用requestFocus()
していますが、機能していません。
4 に答える
このリンクが役立つ場合があります:フォーカス サブシステムの使用方法
requestFocus() の代わりに requestFocusInWindow() を使用して、目的の機能を実現することをお勧めします。
理由:(同じリンクから)
これらのメソッドは非推奨になりました。別のメソッド requestFocus は、コンポーネントのウィンドウにフォーカスを移そうとしますが、常に可能であるとは限らないため、お勧めできません。JDK 1.4 では、代わりに requestFocusInWindow メソッドを使用する必要があります。このメソッドは、コンポーネントのウィンドウをフォーカスしようとしません。メソッドは、メソッドが成功したかどうかを示すブール値を返します。
これは大まかな例ですが、これを使用して開始できると思います。
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class TestFrame extends JFrame {
JButton button1;
JButton button2;
JTextField textField;
public TestFrame() {
initComponents();
}
private void initComponents(){
button1 = new JButton("Button 1");
button2 = new JButton("Button 2");
textField = new JTextField();
button1.setPreferredSize(new Dimension(100,20));
button2.setPreferredSize(new Dimension(100,20));
textField.setPreferredSize(new Dimension(300,20));
this.setSize(new Dimension(600, 300));
this.setLayout(new BorderLayout());
getContentPane().add(button1, BorderLayout.WEST);
getContentPane().add(button2, BorderLayout.CENTER);
getContentPane().add(textField, BorderLayout.EAST);
this.pack();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//This will set focus on the text field
textField.requestFocusInWindow();
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
new TestFrame();
}
});
}
}
最新の編集:NETBeanSの場合
使用コード:
package focusexample;
public class FocusExample extends javax.swing.JFrame {
public FocusExample() {
initComponents();
jTextField1.requestFocusInWindow();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jTextField1 = new javax.swing.JTextField();
jTextField2 = new javax.swing.JTextField();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jButton1.setText("jButton1");
jButton2.setText("jButton2");
jTextField1.setText("jTextField1");
jTextField2.setText("jTextField2");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(87, 87, 87)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jTextField1))
.addGap(69, 69, 69)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(jButton2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jTextField2))
.addContainerGap(98, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(95, 95, 95)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton1)
.addComponent(jButton2))
.addGap(58, 58, 58)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(104, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
public static void main(String args[]) {
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(FocusExample.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(FocusExample.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(FocusExample.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(FocusExample.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new FocusExample().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;
// End of variables declaration
}
textfield.requestFocusInWindow(); を使用しました。多数のフォーム要素 (そのうちのいくつかはテキストフィールド) を含む GUI 内の上記の行。それはうまくいきます。「テキストフィールド」を、問題の要素に付けた名前に置き換えるだけです。私の場合、repId です。だから私は repID.requestFocusInWindow(); を使用します。そして、私のENTERボタンハンドラーの一番下に行を置きます。これで、ユーザーがフォーム フィールドにデータを入力して Enter キーを押すと、フォーカスが最初のテキスト フィールド「repID」に戻ります。答えてくれてありがとう。
この例がお役に立てば幸いです。
JTextField inputText = new JTextField(20);
frame.addWindowFocusListener(new WindowAdapter() {
public void windowGainedFocus(WindowEvent e) {
inputText.requestFocusInWindow();
}
});