-1

When I am open a file that is added to recent menu in the file, but when I click the added path of recent menu it will opened. How?

Here is my code:

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

}
Andrew Thompson
  • 168,117
  • 40
  • 217
  • 433
  • 1
    Look to [`JTextComponent.read(Reader,Object)`](http://docs.oracle.com/javase/8/docs/api/javax/swing/text/JTextComponent.html#read-java.io.Reader-java.lang.Object-) for this. – Andrew Thompson Apr 22 '14 at 04:52
  • 2
    *"When I am open a file that is added to recent menu in the file, but when I click the added path of recent menu it will opened."* Wait ..what? I don't understand that combination of words. Please try describing in other words: a) What you expected to happen b) What actually happened, and for utility c) Why you expected (a) to happen. – Andrew Thompson Apr 22 '14 at 05:00
  • like edit plus opend files automatically added to recent menu in the file menu. Recent menu having recently opened files. how can i open(Click) these files from recent menu. – user3531731 Apr 22 '14 at 05:35
  • For [example](http://stackoverflow.com/a/4039359/230513). – trashgod Apr 22 '14 at 11:19

1 Answers1

0

Don't add the sub menus for the recent items as string, add them as MenuItem itself. I tried to fulfill the requirement by changing few lines in your code:

FULL CODE:

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

}

The changed portion is at the adding of menus in the recent items menu:

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

And the subMenuActionPerformed(evt,string) method:

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){}

           }
deb_rider
  • 570
  • 2
  • 12