2014-10-29 10 views
0

JtabbedPane을 사용하여 텍스트 영역에 두 개의 파일로드. File1의 텍스트를 file1의 document1 및 no 수정을 사용하여 수정하십시오.하지만 file2의 jinternalframe을 닫을 때 데이터 저장 또는 수정 대화 상자를 수정하고 file1을 정상적으로 닫으라는 메시지가 표시됩니다. 내 문제는 파일 자체 (예 : file1)를 수정하기 위해 대화 상자를 여는 방법입니다.jtabbedpane의 특정 파일에 대한 문서 수신기 작동?

다음

내 코드는,

public class Open extends javax.swing.JFrame { 
JTextArea tx; 
ArrayList<String> fileList; 
File file; 
String filename=null; 
int i=0; 
boolean update =false; 
public Open() { 

    fileList=new ArrayList<String>(); 
initComponents(); 
} 
@SuppressWarnings("unchecked") 
// <editor-fold defaultstate="collapsed" desc="Generated Code">       
private void initComponents() { 

    tp = new javax.swing.JTabbedPane(); 
    jMenuBar1 = new javax.swing.JMenuBar(); 
    jMenu1 = new javax.swing.JMenu(); 
    Open = new javax.swing.JMenuItem(); 

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

    jMenu1.setText("File"); 

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

    jMenuBar1.add(jMenu1); 

    setJMenuBar(jMenuBar1); 

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
    getContentPane().setLayout(layout); 
    layout.setHorizontalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addComponent(tp, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE) 
    ); 
    layout.setVerticalGroup(
     layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
     .addComponent(tp, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 279, Short.MAX_VALUE) 
    ); 

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

private void OpenActionPerformed(java.awt.event.ActionEvent evt) {          

    final JFileChooser jc = new JFileChooser(); 
    int returnVal= jc.showOpenDialog(Open.this); 
    String title; 
    String s=null; 
    if(returnVal == JFileChooser.APPROVE_OPTION)  
    file = jc.getSelectedFile(); 
    if (jc.getSelectedFile()!= null) { 
     BufferedReader br = null; 
     StringBuffer str = new StringBuffer(""); 
     StringBuffer str1 = new StringBuffer(""); 
     StringBuilder st = new StringBuilder(""); 
     StringBuilder sbHex = new StringBuilder(); 
     StringBuilder sbText = new StringBuilder(); 
     StringBuilder sbResult = new StringBuilder(); 
     final StringBuilder pb = new StringBuilder(); 
     int bytesCounter =0;   
     String helloWorldInHex=null; 
     int value=0; 
     try { 
      br = new BufferedReader(new FileReader(file)); 
      String line; 
      try { 

        while ((line = br.readLine()) != null) { 
        str.append(line + "\n"); 
       } 
      } 
      catch (IOException ex) { 
       Logger.getLogger(Open.class.getName()).log(Level.SEVERE, null, ex); 
      } 
     } 
     catch (FileNotFoundException ex) { 
      Logger.getLogger(Open.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     String t = str.toString(); 
     filename=file.getPath(); 
     final JInternalFrame internalFrame = new JInternalFrame("",true,true); 
     final String filePath=file.getAbsolutePath(); 
     i++; 
     internalFrame.setName("Doc "+i); 
     tx=new JTextArea(); 
     internalFrame.setTitle(filename); 
     try { 
      internalFrame.setSelected(true); 
     } 
     catch (PropertyVetoException ex) { 
      Logger.getLogger(Open.class.getName()).log(Level.SEVERE, null, ex); 
     }   
     tp.add(internalFrame); 
     try{ 
      tp.setSelectedIndex(i-1); 
     } 
     catch(IndexOutOfBoundsException ioe){ 
     } 
     tx.setText(t); 
     internalFrame.add(tx); 
     internalFrame.setVisible(true); 

     Document doc=tx.getDocument(); 
     doc.addDocumentListener(new DocumentListener() { 
      @Override 
      public void insertUpdate(DocumentEvent e) { 
      update =true; 
      } 

      @Override 
      public void removeUpdate(DocumentEvent e) { 
       update =true; 
      } 

      @Override 
      public void changedUpdate(DocumentEvent e) { 
       update =true; 
      } 
     }); 
     internalFrame.addInternalFrameListener(new InternalFrameAdapter() { 
      @Override 
      public void internalFrameClosing(InternalFrameEvent e) { 


       String name=tx.getName(); 

    if(update==true){ 

      update=false; 
     int reply = JOptionPane.showConfirmDialog(null, 
              "Save Changes to this Document", "Quit", JOptionPane.YES_NO_CANCEL_OPTION); 
      int chooserStatus; 
     if (reply == JOptionPane.YES_OPTION){ 
      boolean success; 
       String editorString; 
       FileWriter fwriter; 
       PrintWriter outputFile; 
       try { 
        DataOutputStream d = new DataOutputStream(new FileOutputStream(filename)); 
        String line = tx.getText(); 
        BufferedReader br = new BufferedReader(new StringReader(line)); 
        while((line = br.readLine())!=null) { 
         d.writeBytes(line + "\r\n"); 
        } 
       } 
       catch (IOException ee) {  
        success = false; 
       } 
     success = true; 
       i--; 
       tp.remove(internalFrame); 
      } 
     else if(reply==JOptionPane.NO_OPTION) 
     { 
      i--; 
     tp.remove(internalFrame); 
     } 
     } 
    else 
    { 
      i--; 
    tp.remove(internalFrame); 
    } 

      } 
     }); 

} 

}          
public static void main(String args[]) { 

    java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
       try { 
       UIManager.setLookAndFeel(
          UIManager.getSystemLookAndFeelClassName()); 
      } catch (ClassNotFoundException ex) { 
       Logger.getLogger(Open.class.getName()).log(Level.SEVERE, null, ex); 
      } catch (InstantiationException ex) { 
       Logger.getLogger(Open.class.getName()).log(Level.SEVERE, null, ex); 
      } catch (IllegalAccessException ex) { 
       Logger.getLogger(Open.class.getName()).log(Level.SEVERE, null, ex); 
      } catch (UnsupportedLookAndFeelException ex) { 
       Logger.getLogger(Open.class.getName()).log(Level.SEVERE, null, ex); 
      } 
      new Open().setVisible(true); 
     } 
    }); 
    } 
// Variables declaration - do not modify      
private javax.swing.JMenuItem Open; 
private javax.swing.JMenu jMenu1; 
private javax.swing.JMenuBar jMenuBar1; 
private javax.swing.JTabbedPane tp; 
// End of variables declaration     
} 

답변

2

당신은 단지 하나 개의 boolean update 깃발을 가지고 있지만 각 파일의 상태에 대해 별도의 하나를 가지고하는 것이 좋습니다 것입니다. 따라서 각 파일이 독립적으로 변경됩니다. 여러 개의 파일이있는 경우 상태 맵을 구성 할 수 있습니다.

+0

방법 각 파일을 분리해서하는? – user3531731

+0

예. By Map 키는 파일 이름이어야하며 값은 상태입니다. – StanislavL

+0

나는 조건이 있으면 무엇을 적어 놓았는지 의심 스럽다. if (..)는 문서가 수정 될 때만 실행됩니다. – user3531731