2014-07-08 5 views
0

현재 열려있는 문서에 포커스를 설정하려고합니다. Create Menu 항목을 여러 번 클릭합니다. 여러 개의 문서를 열지 만 초점은 첫 번째 문서에만 있습니다. 새롭게 열린 문서에 초점을 맞추고 싶습니다.JTabbedPane에서 현재 열려있는 문서를 초점 맞추는 방법

내 코드 :

public class CreateDocs extends javax.swing.JFrame { 
    int i=0; 
    JTextPane textPane; 
    public CreateDocs() { 
     initComponents(); 
    } 
    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code"> 
    private void initComponents() { 

     tabbedPane = new javax.swing.JTabbedPane(); 
     menuBar = new javax.swing.JMenuBar(); 
     jMenu1 = new javax.swing.JMenu(); 
     create = new javax.swing.JMenuItem(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

     jMenu1.setText("File"); 

     create.setText("Create"); 
     create.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       createActionPerformed(evt); 
      } 
     }); 
     jMenu1.add(create); 

     menuBar.add(jMenu1); 

     setJMenuBar(menuBar); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGap(0, 410, Short.MAX_VALUE) 
      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
       .addGroup(layout.createSequentialGroup() 
        .addComponent(tabbedPane, javax.swing.GroupLayout.PREFERRED_SIZE, 410, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addGap(0, 0, Short.MAX_VALUE))) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGap(0, 279, Short.MAX_VALUE) 
      .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
       .addComponent(tabbedPane, javax.swing.GroupLayout.DEFAULT_SIZE, 279, Short.MAX_VALUE)) 
     ); 

     pack(); 
    }// </editor-fold> 

    private void createActionPerformed(java.awt.event.ActionEvent evt) { 
     final JInternalFrame internalFrame = new JInternalFrame(""); 
     i++; 
     internalFrame.setName("Document"+i); 
     internalFrame.setClosable(true); 
     internalFrame.setAutoscrolls(true); 
     textPane=new JTextPane(); 
     textPane.setFont(new java.awt.Font("Miriam Fixed", 0, 14)); 
     internalFrame.add(textPane); 
     tabbedPane.add(internalFrame); 
     internalFrame.setFocusable(true); 
    } 

    public static void main(String args[]) { 
     /* Set the Nimbus look and feel */ 
     //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> 
     /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. 
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */ 
     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(CreateDocs.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (InstantiationException ex) { 
      java.util.logging.Logger.getLogger(CreateDocs.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (IllegalAccessException ex) { 
      java.util.logging.Logger.getLogger(CreateDocs.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
      java.util.logging.Logger.getLogger(CreateDocs.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } 
     //</editor-fold> 

     /* Create and display the form */ 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new CreateDocs().setVisible(true); 
      } 
     }); 
    } 
    // Variables declaration - do not modify 
    private javax.swing.JMenuItem create; 
    private javax.swing.JMenu jMenu1; 
    private javax.swing.JMenuBar menuBar; 
    private javax.swing.JTabbedPane tabbedPane; 
    // End of variables declaration 
} 
+0

'requestFocus()'를 사용해 보셨습니까? – Ordous

+0

예, 작동하지 않으려 고 시도했습니다. – user3556256

답변

2

JInternalFrame를 만들고 JTabbedPane에 추가 않습니다.

JDesktopPane을 사용하고 JInternalFrame을 추가하거나 JPanel을 사용하여 JTabbedPane에 추가하십시오.

다음에 tabbedPane.setSelectedIndex()을 사용하고 탭의 JTextPane에서 requestFocus()을 호출하십시오.

+0

내 프로젝트에서 JTabbedPane으로 JInternalFrame이 필요합니다. 위와 관련하여 제안 해주십시오. – user3556256

+0

왜 JTabbedPane과 함께 JInternalFrame이 필요한가요? – StanislavL

+0

여러 문서를 만들 때 내부 프레임 및 탭 창과 관련하여 더 많은 코드를 작성했습니다. 코드를 변경할 수 없습니다. – user3556256

관련 문제