【问题标题】:How to open recent files added to menu in Swing?如何在 Swing 中打开最近添加到菜单中的文件?
【发布时间】:2014-06-06 07:08:03
【问题描述】:

当我打开一个添加到文件中最近菜单的文件时,但是当我单击最近菜单的添加路径时,它将打开。怎么样?

这是我的代码:

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

}

【问题讨论】:

  • “当我打开一个添加到文件中最近菜单的文件时,但是当我点击最近菜单的添加路径时它会打开。” 等等..什么?我不明白这个词的组合。请尝试用其他语言描述:a)您期望发生的事情 b)实际发生的事情,以及实用程序 c)您期望(a)发生的原因。
  • 喜欢编辑和打开的文件自动添加到文件菜单中的最近菜单。最近打开的文件的最近菜单。如何从最近的菜单中打开(单击)这些文件。
  • 对于example

标签: java swing file-io io jtextarea


【解决方案1】:

不要将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){}

           }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    • 2014-03-24
    • 1970-01-01
    相关资源
    最近更新 更多