to vampirelord() :
怎样使控件可见,他们本身就是可见的。

解决方案 »

  1.   

    没有效果,并且text的值也没有全选。
    只要将焦点切换一下,再调用requestFocus就好使了。
      

  2.   

    我的意思是:
    一般情况下,为了避免画面闪烁,会这样写:
    jpanel jp = new jpanel();
    jp.setvisible(false);
    jp.add(...);
    jp.add(...);
    ...
    jp.setvisible(true);
    不过你如果再最后一句之前,就调用控件的requestfocus方法,可能会出问题。
      

  3.   

    我的panel以及别的控件都是visible的,但是requestfocus还是不起作用。是不是在初始化的时候设置好"tab"键的顺序就应该好使了,让焦点只在按钮和输入框中出现,
    另外问一下:怎样设置按“tab”键的顺序呢??
    我可以加分!!
      

  4.   

    呵呵,不要把分数看的那么重要。
    1,最好把你的代码发上来看看,不用太多,能说说明问题就行。
    2,setNextFocusableComponent()可以设定focus顺序。
      

  5.   

    其实就是一个测试程序,我只是想把焦点在对话框打开时,直接就在JTextField上,而现在,光标在JTextField上,但焦点不在,需要用鼠标点击一下,才可以进行输入。多谢帮忙!!!
    public class TestDialog extends com.sun.java.swing.JDialog {
    JPanel panel;
    JButton button;
    JTextField tf;public TestDialog() {
    super(); panel = new JPanel();
    panel.setName("Test");
    panel.setLayout(null); button = new JButton("OK");
    button.setBounds(10, 10, 91, 23);//加入按钮
    panel.add(button);

    tf = new JTextField("1234567");
    tf.setBounds(10, 100, 91, 23);加入文本编辑框
    panel.add(tf);

    setName("test");
    setDefaultCloseOperation(com.sun.java.swing.WindowConstants.DISPOSE_ON_CLOSE);
    setSize(200, 200);
    setModal(true);
    setResizable(false);
    setContentPane(panel); //设置焦点???????????????????????????
    tf.requestFocus();
    tf.getCaret().setVisible(true);

    }public static void main(String[] args) {
    try {
    TestDialog d = new TestDialog();
    d.addWindowListener(new java.awt.event.WindowAdapter() {
    public void windowClosing(java.awt.event.WindowEvent e) {
    System.exit(0);
    };
    });
    d.setVisible(true);
    } catch (Throwable exception) {
    System.err.println("com.sun.java.swing.JDialog 的 main() 中发生异常");
    exception.printStackTrace(System.out);
    }

    }}
      

  6.   

    写一连串的下面方法。
    public void setNextFocusableComponent(Component aComponent)
      

  7.   

    我现在发现在程序启动后,(JTextField显示之后)就可以用requestFocus获得焦点了,所以在构造函数中获取焦点不能成功。
    但是程序启动后在什么地方能自动调用reauestFocus函数呢?
      

  8.   

    好像在构造函数中设定焦点有点麻烦。
    解决方法还是有的:重载一下setVisible()
        public void setVisible(boolean vFlag){
            super.setVisible(vFlag);
            if (vFlag)  
               tf.requestFocus();
        }
      

  9.   

    谢谢各位:
    我的问题已经解决了,只要在panel中先add textfield,启动时,焦点就在textfield中。
    给分了!!
      

  10.   

    我再补充一下,如果在panel中必须后add textfield,真么办?
    另一个方法:在第一个add的控件(可获得焦点)上加上FocusListener
    example:
      button.addFocusListener(new FocusListener(FocusEvent e){
         public void focusGained(){       textfield.requestFocus();
         }
      });
    button为画面打开时缺省获得焦点的控件 
    textfield为画面打开时想获得焦点的控件