【问题标题】:JTextfield Focus between two JInternalFrame两个 JInternalFrame 之间的 JTextfield 焦点
【发布时间】:2014-06-11 05:03:53
【问题描述】:

在我的应用程序中,我有 3 个扩展 JInternalframe 的类。一个是MainFrame。假设Mainframe 有四个JTextFieldsTF1, TF2, TF3, TF4。当MainFrame 打开时TF1 默认获得焦点。

现在用户将按下回车键并转到TF2。在下一步中,根据条件,另一个 JInternalFrame SubFrame_1SubFrame_2 将作为浮动窗口打开。

SubFrame_1 有四个不同的文本字段。 TF5, TF6, TF7, TF8。同样TF5 默认获得焦点。一些计算将在这里完成,当用户按下输入 TF8 SubFrame_1 时将被处理。并且 MainFrame 应该在 TF3 中重新获得焦点。相同的条件可以应用于SubFrame_2。但是当 SubFrame_1 被处理时 TF3 永远不会获得焦点。更可怕的是,有时当 SubFrame 被处理时 MainFrame 没有得到焦点。我怎样才能摆脱这个问题?我已经尝试了各种功能requestFocusInWindow()requestFocus()grabFocus() 等。请帮助。

【问题讨论】:

  • 请发布一些示例代码。
  • 技术上是否可行?
  • 似乎可行,但在我看到代码并正确理解您要做什么之前无法确定。
  • 我可以举个例子吗?

标签: java focus jtextfield jinternalframe


【解决方案1】:

这是我的小例子: public class Form1 extends javax.swing.JFrame {

/**
 * 创建新表单 Form1
 */
公共表格1(){
    初始化组件();
    this.jInternalFrame2.setVisible(false);
    this.jInternalFrame3.setVisible(false);

}

/**
 * 从构造函数中调用此方法以初始化表单。
 * 警告:请勿修改此代码。这个方法的内容总是
 * 由表单编辑器重新生成。
 */
@SuppressWarnings("未选中")
// 
私人无效initComponents(){

    jInternalFrame1 = new javax.swing.JInternalFrame();
    jButton1 = new javax.swing.JButton();
    jTextField1 = 新 javax.swing.JTextField();
    jTextField2 = new javax.swing.JTextField();
    jTextField3 = new javax.swing.JTextField();
    jInternalFrame2 = new javax.swing.JInternalFrame();
    jInternalFrame3 = new javax.swing.JInternalFrame();
    jTextField4 = 新 javax.swing.JTextField();
    jTextField5 = new javax.swing.JTextField();
    jButton2 = 新 javax.swing.JButton();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jInternalFrame1.setTitle("JIF1");
    jInternalFrame1.setVisible(true);

    jButton1.setText("焦点在 JIF 2");
    jButton1.addActionListener(new java.awt.event.ActionListener() {
        公共无效actionPerformed(java.awt.event.ActionEvent evt){
            jButton1ActionPerformed(evt);
        }
    });

    jTextField1.setText("jTextField1");

    jTextField2.setText("jTextField1");

    jTextField3.setText("jTextField1");

    javax.swing.GroupLayout jInternalFrame1Layout = new javax.swing.GroupLayout(jInternalFrame1.getContentPane());
    jInternalFrame1.getContentPane().setLayout(jInternalFrame1Layout);
    jInternalFrame1Layout.setHorizo​​ntalGroup(
        jInternalFrame1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(jInternalFrame1Layout.createSequentialGroup()
            .addContainerGap()
            .addGroup(jInternalFrame1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, 179, Short.MAX_VALUE)
                .addGroup(jInternalFrame1Layout.createSequentialGroup()
                    .addGroup(jInternalFrame1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .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)
                        .addComponent(jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGap(0, 0, Short.MAX_VALUE)))
            .addContainerGap())
    );
    jInternalFrame1Layout.setVerticalGroup(
        jInternalFrame1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jInternalFrame1Layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(jTextField1,javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
            .addComponent(jTextField2,javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addComponent(jTextField3,javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 109, Short.MAX_VALUE)
            .addComponent(jButton1)
            .addContainerGap())
    );

    jInternalFrame2.setVisible(true);

    javax.swing.GroupLayout jInternalFrame2Layout = new javax.swing.GroupLayout(jInternalFrame2.getContentPane());
    jInternalFrame2.getContentPane().setLayout(jInternalFrame2Layout);
    jInternalFrame2Layout.setHorizo​​ntalGroup(
        jInternalFrame2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 0, Short.MAX_VALUE)
    );
    jInternalFrame2Layout.setVerticalGroup(
        jInternalFrame2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 128, Short.MAX_VALUE)
    );

    jInternalFrame3.setTitle("JIF2");
    jInternalFrame3.setVisible(true);

    jTextField4.setText("jTextField4");

    jTextField5.setText("jTextField5");

    jButton2.setText("焦点在 JIF 1");
    jButton2.addActionListener(new java.awt.event.ActionListener() {
        公共无效actionPerformed(java.awt.event.ActionEvent evt){
            jButton2ActionPerformed(evt);
        }
    });

    javax.swing.GroupLayout jInternalFrame3Layout = new javax.swing.GroupLayout(jInternalFrame3.getContentPane());
    jInternalFrame3.getContentPane().setLayout(jInternalFrame3Layout);
    jInternalFrame3Layout.setHorizo​​ntalGroup(
        jInternalFrame3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(jInternalFrame3Layout.createSequentialGroup()
            .addContainerGap()
            .addGroup(jInternalFrame3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addComponent(jTextField4,javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE)
                .addComponent(jTextField5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        .addComponent(jButton2, javax.swing.GroupLayout.DEFAULT_SIZE, 284, Short.MAX_VALUE)
    );
    jInternalFrame3Layout.setVerticalGroup(
        jInternalFrame3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(jInternalFrame3Layout.createSequentialGroup()
            .addContainerGap()
            .addComponent(jTextField4,javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
            .addComponent(jTextField5,javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,javax.swing.GroupLayout.DEFAULT_SIZE,Short.MAX_VALUE)
            .addComponent(jButton2)
            .addContainerGap())
    );

    javax.swing.GroupLayout 布局 = 新 javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(布局);
    layout.setHorizo​​ntalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                .addComponent(jInternalFrame1)
                .addComponent(jInternalFrame2))
            .addGap(18, 18, 18)
            .addComponent(jInternalFrame3,javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap(121, Short.MAX_VALUE))
    );
    布局.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addContainerGap()
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                .addComponent(jInternalFrame3)
                .addComponent(jInternalFrame1))
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
            .addComponent(jInternalFrame2,javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    );

    盒();
}// 

私人无效jButton1ActionPerformed(java.awt.event.ActionEvent evt){
    this.jInternalFrame3.setVisible(true);
    this.jTextField4.requestFocus();
    this.jInternalFrame1.setVisible(false);
}

私人无效jButton2ActionPerformed(java.awt.event.ActionEvent evt){
    this.jInternalFrame1.setVisible(true);
    this.jTextField3.requestFocus();
    this.jInternalFrame3.setVisible(false);
}

/**
 * @param args 命令行参数
 */
公共静态无效主要(字符串参数[]){
    /* 设置 Nimbus 的外观和感觉 */
    //
    /* 如果 Nimbus(Java SE 6 中引入)不可用,则保持默认外观。
     * 详情见 http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
     */
    尝试 {
        对于(javax.swing.UIManager.LookAndFeelInfo 信息:javax.swing.UIManager.getInstalledLookAndFeels()){
            if ("Nimbus".equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                休息;
            }
        }
    } 捕捉(ClassNotFoundException ex){
        java.util.logging.Logger.getLogger(Form1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } 捕捉(实例化异常前){
        java.util.logging.Logger.getLogger(Form1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } 捕捉(IllegalAccessException ex){
        java.util.logging.Logger.getLogger(Form1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } 捕捉(javax.swing.UnsupportedLookAndFeelException ex){
        java.util.logging.Logger.getLogger(Form1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }
    //

    /* 创建并显示表单 */
    java.awt.EventQueue.invokeLater(new Runnable() {
        公共无效运行(){
            新的 Form1().setVisible(true);
        }
    });
}
// 变量声明 - 不要修改
私有 javax.swing.JButton jButton1;
私有 javax.swing.JButton jButton2;
私有 javax.swing.JInternalFrame jInternalFrame1;
私有 javax.swing.JInternalFrame jInternalFrame2;
私有 javax.swing.JInternalFrame jInternalFrame3;
私有 javax.swing.JTextField jTextField1;
私有 javax.swing.JTextField jTextField2;
私有 javax.swing.JTextField jTextField3;
私有 javax.swing.JTextField jTextField4;
私有 javax.swing.JTextField jTextField5;
// 变量声明结束

}

【讨论】:

  • 在一个单独的类中是绝对可能的。在单个文件中,除了 JInternalFrame 之外,我还有许多选项。但我有三个扩展 JInternalFrame 的类。
  • 这就是为什么我说“你的要求不清楚”。简单的替代方法可能是传递 JInternalFrame 的实例并创建将焦点设置在所需字段上的公共方法
猜你喜欢
  • 2011-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-30
相关资源
最近更新 更多