如何打开添加到Swing菜单中的最新文件?

时间:2014-04-22 04:49:25

标签: java swing file-io io jtextarea

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

这是我的代码:

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 个答案:

答案 0 :(得分:0)

不要将sub menus的{​​{1}}添加为字符串,将其添加为recent 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)