2014-04-22 58 views
-1

當我打開添加到文件中最近菜單的文件時,但當我單擊最近菜單的添加路徑時,它將打開。怎麼樣?如何打開最近添加到Swing菜單中的文件?

這裏是我的代碼:

public class RecentItemList extends javax.swing.JFrame { 

    JTextArea tx; 
    int i=0; 
    int recentItems_count=0; 
    String filename; 
    String recentItem; 
    Queue<String> q; 
    public RecentItemList() { 
     q=new LinkedList<>(); 
     initComponents(); 
    } 


    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents 
    private void initComponents() { 

     tp = new javax.swing.JTabbedPane(); 
     jMenuBar1 = new javax.swing.JMenuBar(); 
     jMenu1 = new javax.swing.JMenu(); 
     create = new javax.swing.JMenuItem(); 
     save = new javax.swing.JMenuItem(); 
     open = new javax.swing.JMenuItem(); 
     recentItems = new javax.swing.JMenu(); 

     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); 

     recentItems.setText("Recent Items....."); 
     recentItems.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       recentItemsActionPerformed(evt); 
      } 
     }); 
     jMenu1.add(recentItems); 

     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) {//GEN-FIRST:event_openActionPerformed 

      FileDialog fd = new FileDialog(RecentItemList.this, "Select File", FileDialog.LOAD); 
      fd.show(); 
      String title; 
      String sts; 
      if (fd.getFile() != null) { 
      sts = fd.getDirectory() + fd.getFile(); 
      title=fd.getFile(); 
      System.out.println("title :"+sts); 
      BufferedReader br = null; 
      StringBuffer str = new StringBuffer(""); 
      try { 
       br = new BufferedReader(new FileReader(sts)); 
       String line; 
      try { 
         while ((line = br.readLine()) != null) { 
         str.append(line + "\n"); 
        } 
        } catch (IOException ex) { 
        Logger.getLogger(RecentItemList.class.getName()).log(Level.SEVERE, null, ex); 
       } 
       } catch (FileNotFoundException ex) { 
       Logger.getLogger(RecentItemList.class.getName()).log(Level.SEVERE, null, ex); 
      } 
     String t = str.toString(); 
     final JInternalFrame internalFrame = new JInternalFrame("",true,true); 
     tx = new JTextArea(); 
     internalFrame.add(tx); 
     i+=1; 
     internalFrame.setName("Document"+i); 
     internalFrame.setTitle(title); 
     tp.add(internalFrame); 
     internalFrame.setVisible(true); 
      internalFrame.addInternalFrameListener(new InternalFrameAdapter() { 
     @Override 
     public void internalFrameClosing(InternalFrameEvent e) { 
      tp.remove(internalFrame); 
     } 
    }); 
      tx.setText(t); 
      q.add(sts); 
      recentItems.add(sts); 
      recentItems_count++; 

     if(recentItems_count>2){ 
      recentItem=(String)q.remove(); 
      recentItems.removeAll(); 
      // recentItems_count--; 
      for (String string : q) { 

        recentItems.add(string); 
      } 

     } 

       try { 
       br.close(); 
       } 
      catch (IOException ex) { 
       Logger.getLogger(RecentItemList.class.getName()).log(Level.SEVERE, null, ex); 
      } 
} 
    } 



    private void recentItemsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_recentItemsActionPerformed 
     Object[] selectedObjects = recentItems.getSelectedObjects(); 
     System.out.println(selectedObjects); 

    }//GEN-LAST:event_recentItemsActionPerformed 

    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(RecentItemList.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (InstantiationException ex) { 
      java.util.logging.Logger.getLogger(RecentItemList.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (IllegalAccessException ex) { 
      java.util.logging.Logger.getLogger(RecentItemList.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
      java.util.logging.Logger.getLogger(RecentItemList.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } 
     //</editor-fold> 

     /* Create and display the form */ 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new RecentItemList().setVisible(true); 
      } 
     }); 
    } 
    // Variables declaration - do not modify//GEN-BEGIN:variables 
    private javax.swing.JMenuItem create; 
    private javax.swing.JMenu jMenu1; 
    private javax.swing.JMenuBar jMenuBar1; 
    private javax.swing.JMenuItem open; 
    private javax.swing.JMenu recentItems; 
    private javax.swing.JMenuItem save; 
    private javax.swing.JTabbedPane tp; 
    // End of variables declaration//GEN-END:variables 

} 
+1

查找到['JTextComp onent.read(閱讀器,對象)'](http://docs.oracle.com/javase/8/docs/api/javax/swing/text/JTextComponent.html#read-java.io.Reader-java.lang .Object-)爲此。 –

+2

*「當我打開添加到文件中最近菜單的文件時,但當我單擊最近菜單的添加路徑時,它將打開。」*等等..什麼?我不明白這些詞的組合。請嘗試用下面的話來描述:a)你預期會發生什麼b)實際發生了什麼,以及對於效用c)爲什麼你期望(a)發生。 –

+0

像編輯加opend文件自動添加到文件菜單中最近的菜單。最近的菜單有最近打開的文件。我怎樣才能打開(點擊)從最近的菜單中的這些文件。 – user3531731

回答

0

不要添加sub menusrecent items字符串,其添加爲MenuItem本身。 我試圖在你的代碼改變幾行,以滿足要求:

全碼:

public class RecentItem extends javax.swing.JFrame { 

    JTextArea tx; 
    int i=0; 
    int recentItems_count=0; 
    String filename; 
    String recentItem; 
    Queue<String> q; 
    public RecentItem() { 
     q=new LinkedList<>(); 
     initComponents(); 
    } 


    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents 
    private void initComponents() { 

     tp = new javax.swing.JTabbedPane(); 
     jMenuBar1 = new javax.swing.JMenuBar(); 
     jMenu1 = new javax.swing.JMenu(); 
     create = new javax.swing.JMenuItem(); 
     save = new javax.swing.JMenuItem(); 
     open = new javax.swing.JMenuItem(); 
     recentItems = new javax.swing.JMenu(); 

     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); 

     recentItems.setText("Recent Items....."); 
//  recentItems.addActionListener(new java.awt.event.ActionListener() { 
//   public void actionPerformed(java.awt.event.ActionEvent evt) { 
//    recentItemsActionPerformed(evt); 
//   } 
//  }); /* NO NEED FOR THESE */ 
     jMenu1.add(recentItems); 

     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) {//GEN-FIRST:event_openActionPerformed 

      FileDialog fd = new FileDialog(RecentItem.this, "Select File", FileDialog.LOAD); 
      fd.show(); 
      String title; 
      String sts; 
      if (fd.getFile() != null) { 
      sts = fd.getDirectory() + fd.getFile(); 
      title=fd.getFile(); 
      //System.out.println("title :"+sts); 
      BufferedReader br = null; 
      StringBuffer str = new StringBuffer(""); 
      try { 
       br = new BufferedReader(new FileReader(sts)); 
       String line; 
       try { 
        while ((line = br.readLine()) != null) { 
         str.append(line + "\n"); 
        } 
       } catch (IOException ex) { 
        Logger.getLogger(RecentItem.class.getName()).log(Level.SEVERE, null, ex); 
       } 
      } catch (FileNotFoundException ex) { 
       Logger.getLogger(RecentItem.class.getName()).log(Level.SEVERE, null, ex); 
      } 
      String t = str.toString(); 
      final JInternalFrame internalFrame = new JInternalFrame("",true,true); 
      tx = new JTextArea(); 
      internalFrame.add(tx); 
      i+=1; 
      internalFrame.setName("Document"+i); 
      internalFrame.setTitle(title); 
      tp.add(internalFrame); 
      internalFrame.setVisible(true); 
      internalFrame.addInternalFrameListener(new InternalFrameAdapter() { 
       @Override 
       public void internalFrameClosing(InternalFrameEvent e) { 
        tp.remove(internalFrame); 
       } 
      }); 
      tx.setText(t); 
      q.add(sts); 
      /*CHANGES*/ 
      JMenuItem STS=new JMenuItem(sts); //creating new menu item with the string 
      STS.addActionListener(new java.awt.event.ActionListener() { //adding action listenner 
       public void actionPerformed(java.awt.event.ActionEvent evt) { 
        subMenuActionPerformed(evt,sts); 
       }    
      }); 
      recentItems.add(STS); //adding the newly created item to the menu 

      recentItems_count++; 

      if(recentItems_count>2){ 
       recentItem=(String)q.remove(); 
       recentItems.removeAll(); 
       // recentItems_count--; 
       for (String string : q) { 
        /*DOING THE SAME, HERE AGAIN */ 
        JMenuItem item=new JMenuItem(string); 
        item.addActionListener(new java.awt.event.ActionListener() { 
         public void actionPerformed(java.awt.event.ActionEvent evt) { 
          subMenuActionPerformed(evt,string); 
         }    
        }); 
        recentItems.add(item); 
       } 
      } 
      try { 
       br.close(); 
      } catch (IOException ex) { 
       Logger.getLogger(RecentItem.class.getName()).log(Level.SEVERE, null, ex); 
      } 
     } 
    } 

    /*EVENT TO OPEN A FILE IN NEW TAB*/ 
    private void subMenuActionPerformed(ActionEvent evt, String title) { 
     BufferedReader br = null; 
      StringBuffer str = new StringBuffer(""); 
      String fileName=new File(title).getName(); 
      try { 
       br = new BufferedReader(new FileReader(title)); 
       String line; 
      try { 
         while ((line = br.readLine()) != null) { 
         str.append(line + "\n"); 
        } 
        } catch (IOException ex) { 
        Logger.getLogger(RecentItem.class.getName()).log(Level.SEVERE, null, ex); 
       } 
       } catch (FileNotFoundException ex) { 
       Logger.getLogger(RecentItem.class.getName()).log(Level.SEVERE, null, ex); 
      } 
     String t = str.toString(); 
     final JInternalFrame internalFrame = new JInternalFrame("",true,true); 
     tx = new JTextArea(); 
     internalFrame.add(tx); 
     i+=1; 
     internalFrame.setName("Document"+i); 
     internalFrame.setTitle(fileName); 
     tp.add(internalFrame); 
     internalFrame.setVisible(true); 
      internalFrame.addInternalFrameListener(new InternalFrameAdapter() { 
     @Override 
     public void internalFrameClosing(InternalFrameEvent e) { 
      tp.remove(internalFrame); 
     } 
    }); 
      tx.setText(t); 
      try{ 
      br.close(); 
     } catch(IOException e){} 

       } 

// private void recentItemsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_recentItemsActionPerformed 
//  Object[] selectedObjects = recentItems.getSelectedObjects(); 
//  System.out.println(selectedObjects); 
// 
// }//GEN-LAST:event_recentItemsActionPerformed 

    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(RecentItem.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (InstantiationException ex) { 
      java.util.logging.Logger.getLogger(RecentItem.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (IllegalAccessException ex) { 
      java.util.logging.Logger.getLogger(RecentItem.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
      java.util.logging.Logger.getLogger(RecentItem.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } 
     //</editor-fold> 

     /* Create and display the form */ 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new RecentItem().setVisible(true); 
      } 
     }); 
    } 
    // Variables declaration - do not modify//GEN-BEGIN:variables 
    private javax.swing.JMenuItem create; 
    private javax.swing.JMenu jMenu1; 
    private javax.swing.JMenuBar jMenuBar1; 
    private javax.swing.JMenuItem open; 
    private javax.swing.JMenu recentItems; 
    private javax.swing.JMenuItem save; 
    private javax.swing.JTabbedPane tp; 
    // End of variables declaration//GEN-END:variables 

} 

更改的部分是在菜單中recent items菜單中添加:

 JMenuItem STS=new JMenuItem(sts); //creating new menu item with the string 
     STS.addActionListener(new java.awt.event.ActionListener() { //adding action listenner 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       subMenuActionPerformed(evt,sts); 
      }    
     }); 
     recentItems.add(STS); //adding the newly created item to the menu 

     recentItems_count++; 

     if(recentItems_count>2){ 
      recentItem=(String)q.remove(); 
      recentItems.removeAll(); 
      // recentItems_count--; 
      for (String string : q) { 
       /*DOING THE SAME, HERE AGAIN */ 
       JMenuItem item=new JMenuItem(string); 
       item.addActionListener(new java.awt.event.ActionListener() { 
        public void actionPerformed(java.awt.event.ActionEvent evt) { 
         subMenuActionPerformed(evt,string); 
        }    
       }); 
       recentItems.add(item); 
      } 
     } 

subMenuActionPerformed(evt,string)方法:

private void subMenuActionPerformed(ActionEvent evt, String title) { 
    BufferedReader br = null; 
     StringBuffer str = new StringBuffer(""); 
     String fileName=new File(title).getName(); 
     try { 
      br = new BufferedReader(new FileReader(title)); 
      String line; 
     try { 
        while ((line = br.readLine()) != null) { 
        str.append(line + "\n"); 
       } 
       } catch (IOException ex) { 
       Logger.getLogger(RecentItem.class.getName()).log(Level.SEVERE, null, ex); 
      } 
      } catch (FileNotFoundException ex) { 
      Logger.getLogger(RecentItem.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    String t = str.toString(); 
    final JInternalFrame internalFrame = new JInternalFrame("",true,true); 
    tx = new JTextArea(); 
    internalFrame.add(tx); 
    i+=1; 
    internalFrame.setName("Document"+i); 
    internalFrame.setTitle(fileName); 
    tp.add(internalFrame); 
    internalFrame.setVisible(true); 
     internalFrame.addInternalFrameListener(new InternalFrameAdapter() { 
    @Override 
    public void internalFrameClosing(InternalFrameEvent e) { 
     tp.remove(internalFrame); 
    } 
}); 
     tx.setText(t); 

     try{ 
      br.close(); 
     } catch(IOException e){} 

      } 
+0

它正在工作... :) –

相關問題