【问题标题】:Can't get requestFocus to focus on JTextFields sequentially无法让 requestFocus 按顺序关注 JTextField
【发布时间】:2014-04-09 11:36:42
【问题描述】:

我一直在努力做到这一点,以便在单击 "Next" 按钮时,它会根据需要进入下一个 JTextField,然后是下一个,然后是下一个,依此类推。它只与一个requestFocus() 一起工作,但是当i 将该代码添加到我的每个JTextFields 时,它直接转到了请求的最后一个焦点。代码如下:

//adds functionality to the next button
        next.addActionListener( new ActionListener(){
    @Override
    public void actionPerformed(ActionEvent e){
        //creates a file for the next button output
        final File file = new File("NextOutput.txt");
        //creates a printwriter to output to file everytime next button is clicked (overwrite)
        try (PrintWriter output = new PrintWriter(new FileWriter(file))) {
            String s = fName.getText();
            output.print(s + " ");
            lName.requestFocus();
            String s1 = lName.getText();
            output.append(s1 + " ");
            sNumber.requestFocus();
            String s2 = sNumber.getText();
            output.append(s2 + " ");
            lResults.requestFocus();
            String s3 = lResults.getText();
            output.append(s3 + " ");


        } catch (IOException ex) {
            Logger.getLogger(MyProgram.class.getName()).log(Level.SEVERE, null, ex);
        }

    } 

代码中缺少什么?

【问题讨论】:

    标签: java jbutton jtextfield


    【解决方案1】:

    您首先要检查哪个TextField 拥有焦点,然后请求下一个字段的焦点。在这种方法中,您请求关注 lName,然后是 sNumber,然后您将最终获得拥有焦点的 lResult

    public void actionPerformed(ActionEvent e) {
        //creates a file for the next button output
        final File file = new File("NextOutput.txt");
        //creates a printwriter to output to file everytime next button is clicked (overwrite)
        boolean lNameFocus = lName.isFocusOwner();
        boolean sNumberFocus = sNumber.isFocusOwner();
        boolean fNameFocus = fName.isFocusOwner();
        boolean lResultsFocus = lResults.isFocusOwner();
    
        try (PrintWriter output = new PrintWriter(new FileWriter(file))) {
            //If none of the fields is owning the focus then lName requests the focus
            if (!(lNameFocus && sNumberFocus && fNameFocus && lResultsFocus)) {
                String s = fName.getText();
                output.print(s + " ");
                lName.requestFocus();
            //if lName is owning the focus then sNumber should be next to request
            } else if (lNameFocus) {
                String s1 = lName.getText();
                output.append(s1 + " ");
                sNumber.requestFocus();
            // and so on
            } else if (sNumberFocus) {
                String s2 = sNumber.getText();
                output.append(s2 + " ");
                lResults.requestFocus();
                String s3 = lResults.getText();
                output.append(s3 + " ");
            }
    
        } catch (IOException ex) {
            Logger.getLogger(MyProgram.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-09-10
      • 2011-10-26
      • 2013-08-16
      • 2013-09-20
      • 1970-01-01
      • 1970-01-01
      • 2016-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多