2013-05-06 2 views
1

Я сделал небольшую демо-версию блокнота, и я пытаюсь открыть файл в том же фрейме в главном фрейме, но, открывая файл, который открывается в другом фрейме, я хочу, чтобы он открывался в первом кадре, который открывается при запуске программы ,Как открыть текстовый файл в том же фрейме, когда он запускается в первый раз?

import java.awt.*; 
import javax.swing.*; 
import java.awt.event.*; 
import java.util.*; 
import java.io.*; 

    public class DemoMenu extends Frame 
    { 
    Frame frm=new Frame(); 
    MenuBar bar=new MenuBar(); 
    //frm.setMenuBar(bar); 
    Menu mf=new Menu("File"); 
    Menu me=new Menu("Edit"); 
    Menu mfo=new Menu("Format"); 
    Menu mv=new Menu("View"); 
    Menu mh=new Menu("Help"); 

    MenuItem mf1=new MenuItem("New"+"  "+"Ctrl+N"); 
    MenuItem mf2=new MenuItem("Open..."+"  "+"Ctrl+O"); 
    MenuItem mf3=new MenuItem("Save"+"  "+"Ctrl+S"); 
    MenuItem mf4=new MenuItem("Save As..."); 
    MenuItem mf5=new MenuItem("Page Setup..."); 
    MenuItem mf6=new MenuItem("Print..."+"  "+"Ctrl+P"); 
    MenuItem mf7=new MenuItem("Exit"); 

    MenuItem me1=new MenuItem("Undo"+"  "+"Ctrl+Z"); 
    MenuItem me2=new MenuItem("Cut"+"  "+"Ctrl+X"); 
    MenuItem me3=new MenuItem("Copy"+"  "+"Ctrl+C"); 
    MenuItem me4=new MenuItem("Paste"+"  "+"Ctrl+V"); 
    MenuItem me5=new MenuItem("Delete"+"  "+"Del"); 
    MenuItem me6=new MenuItem("Find..."+"  "+"Ctrl+F"); 
    MenuItem me7=new MenuItem("Find Next"+"  "+"F3"); 
    MenuItem me8=new MenuItem("Replace..."+"  "+"Ctrl+H"); 
    MenuItem me9=new MenuItem("Go To"+"  "+"Ctrl+G"); 
    MenuItem me10=new MenuItem("Select All"+"  "+"Ctrl+A"); 
    MenuItem me11=new MenuItem("Date/Time"+"  "+"F5"); 

    MenuItem mfo1=new MenuItem("Word Wrap"); 
    MenuItem mfo2=new MenuItem("Font..."); 

    MenuItem mv1=new MenuItem("Status Bar"); 

    MenuItem mh1=new MenuItem("Help Topics"); 
    MenuItem mh2=new MenuItem("About Notepad"); 

    public static void main(String args[]) 
    { 
    DemoMenu dm=new DemoMenu(); 

    } 
    public DemoMenu() 
    { 
     super("United- Notepad"); 
     setMenuBar(bar); 
     bar.add(mf); 
     bar.add(me); 
     bar.add(mfo); 
     bar.add(mv); 
     bar.add(mh); 

     mf.add(mf1); 
     mf.add(mf2); 
     mf.add(mf3); 
     mf.add(mf4); 
     mf.addSeparator(); 
     mf.add(mf5); 
     mf.add(mf6); 
     mf.addSeparator(); 
     mf.add(mf7); 

     mf1.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      JOptionPane smd=new JOptionPane(); 
      smd.showMessageDialog(null,"Press Ok to open new page"); 
     } 
    }); 

     final JTextArea jta=new JTextArea(10,20); 
     JScrollPane scrl=new JScrollPane(jta); 
    frm.add(scrl); 

     mf2.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 

      JFileChooser chooser=new JFileChooser(); 
     int selection=chooser.showOpenDialog(frm); 
      if(selection==JFileChooser.APPROVE_OPTION) 
      { 
     JOptionPane.showMessageDialog(null,"so u want to open the file..."); 
     frm.setSize(520,540); 
     frm.setVisible(true); 

     File file = chooser.getSelectedFile(); 

     FileInputStream fis=null; 

     try 
      { 
      fis=new FileInputStream(file); 
      byte b[]=new byte[fis.available()]; 
      fis.read(b); 
      String str=new String(b); 
      jta.setText(str); 
      } 
      catch(Exception f) 
      { 
       f.printStackTrace(); 
      } 
       } 
     } 
    }); 

     mf3.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      JFileChooser chooser=new JFileChooser(); 
      chooser.showSaveDialog(null); 
     } 

    }); 


     mf4.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      JFileChooser chooser=new JFileChooser(); 
      chooser.showDialog(null,"Save As"); 
     } 
    }); 

      mf7.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
      JOptionPane scd=new JOptionPane(); 
      scd.showConfirmDialog(null,"Are you want to exit"); 
     } 
    }); 
      me.add(me1); 
      me.addSeparator(); 
      me.add(me2); 
      me.add(me3); 
      me.add(me4); 
      me.add(me5); 
      me.addSeparator(); 
      me.add(me6); 
      me.add(me7); 
      me.add(me8); 
      me.add(me9); 
      me.addSeparator(); 
      me.add(me10); 
      me.add(me11); 
      me11.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      Date d1=new Date(); 
      JOptionPane smddate=new JOptionPane(); 
      smddate.showMessageDialog(null,d1); 
     } 
    }); 

      mfo.add(mfo1); 
      mfo.add(mfo2); 

      mv.add(mv1); 

      mh.add(mh1); 
      mh.addSeparator(); 
      mh.add(mh2); 

      setSize(520,540); 
      setVisible(true); 
    } 
     } 
+2

1) Этот код использует странную смесь AWT (например, 'Frame') & Свинг (например,' JOptionPane'). Было бы лучше, если бы все это было Свинг. 2) Одна пустая строка пробела всегда достаточно! 3) Используйте последовательный и логический отступ для кодовых блоков. Отступ кода предназначен для того, чтобы помочь людям понять поток программы. 4) Чтобы получить более эффективную помощь, отправьте сообщение [SSCCE] (http://sscce.org/). Я вижу более 20 пунктов меню, в то время как я подозреваю, что это только нужно. –

ответ

2

Хорошо, давайте начнем здесь ...

public class DemoMenu extends Frame 
{ 
    Frame frm=new Frame(); 

Вы расширяете Frame, но затем вы создаете другую ссылку на другой Frame, а также.

Вместо использования DemoMenu, вы, кажется, использует этот «другой» frm вместо ...

Вы также смешивание тяжелых и легких компонентов (AWT/Swing), это никогда не будет хорошо закончиться. Вместо

  • Frame, используйте JFrame
  • Menu используйте JMenu
  • MenuItem, используйте JMenuItem

, который позволяет мне представить вам setDefaultCloseOperation, который позволит определить, какое действие должно иметь место когда использование пытается закрыть окно с помощью кнопки «x» ...

Если вы открываете поток, вы несете ответственность за его закрытие (см. Метод открытия файла).

Это должно сделать код более похожим ...

import java.awt.EventQueue; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.File; 
import java.io.FileInputStream; 
import java.util.Date; 
import javax.swing.JFileChooser; 
import javax.swing.JFrame; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 
import javax.swing.JOptionPane; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class DemoMenu extends JFrame { 

// Frame frm = new Frame(); 
    JMenuBar bar = new JMenuBar(); 
    //frm.setJMenuBar(bar); 
    JMenu mf = new JMenu("File"); 
    JMenu me = new JMenu("Edit"); 
    JMenu mfo = new JMenu("Format"); 
    JMenu mv = new JMenu("View"); 
    JMenu mh = new JMenu("Help"); 
    JMenuItem mf1 = new JMenuItem("New" + "  " + "Ctrl+N"); 
    JMenuItem mf2 = new JMenuItem("Open..." + "  " + "Ctrl+O"); 
    JMenuItem mf3 = new JMenuItem("Save" + "  " + "Ctrl+S"); 
    JMenuItem mf4 = new JMenuItem("Save As..."); 
    JMenuItem mf5 = new JMenuItem("Page Setup..."); 
    JMenuItem mf6 = new JMenuItem("Print..." + "  " + "Ctrl+P"); 
    JMenuItem mf7 = new JMenuItem("Exit"); 
    JMenuItem me1 = new JMenuItem("Undo" + "  " + "Ctrl+Z"); 
    JMenuItem me2 = new JMenuItem("Cut" + "  " + "Ctrl+X"); 
    JMenuItem me3 = new JMenuItem("Copy" + "  " + "Ctrl+C"); 
    JMenuItem me4 = new JMenuItem("Paste" + "  " + "Ctrl+V"); 
    JMenuItem me5 = new JMenuItem("Delete" + "  " + "Del"); 
    JMenuItem me6 = new JMenuItem("Find..." + "  " + "Ctrl+F"); 
    JMenuItem me7 = new JMenuItem("Find Next" + "  " + "F3"); 
    JMenuItem me8 = new JMenuItem("Replace..." + "  " + "Ctrl+H"); 
    JMenuItem me9 = new JMenuItem("Go To" + "  " + "Ctrl+G"); 
    JMenuItem me10 = new JMenuItem("Select All" + "  " + "Ctrl+A"); 
    JMenuItem me11 = new JMenuItem("Date/Time" + "  " + "F5"); 
    JMenuItem mfo1 = new JMenuItem("Word Wrap"); 
    JMenuItem mfo2 = new JMenuItem("Font..."); 
    JMenuItem mv1 = new JMenuItem("Status Bar"); 
    JMenuItem mh1 = new JMenuItem("Help Topics"); 
    JMenuItem mh2 = new JMenuItem("About Notepad"); 

    public static void main(String args[]) { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
       } 

       DemoMenu dm = new DemoMenu(); 
      } 
     }); 

    } 

    public DemoMenu() { 
     super("United- Notepad"); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setJMenuBar(bar); 
     bar.add(mf); 
     bar.add(me); 
     bar.add(mfo); 
     bar.add(mv); 
     bar.add(mh); 

     mf.add(mf1); 
     mf.add(mf2); 
     mf.add(mf3); 
     mf.add(mf4); 
     mf.addSeparator(); 
     mf.add(mf5); 
     mf.add(mf6); 
     mf.addSeparator(); 
     mf.add(mf7); 


     mf1.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       JOptionPane smd = new JOptionPane(); 
       smd.showMessageDialog(null, "Press Ok to open new page"); 

      } 
     }); 

     final JTextArea jta = new JTextArea(10, 20); 
     JScrollPane scrl = new JScrollPane(jta); 
     add(scrl); 

     mf2.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 

       JFileChooser chooser = new JFileChooser(); 
       int selection = chooser.showOpenDialog(DemoMenu.this); 
       if (selection == JFileChooser.APPROVE_OPTION) { 

        JOptionPane.showMessageDialog(null, "so u want to open the file..."); 
        File file = chooser.getSelectedFile(); 
        FileInputStream fis = null; 
        try { 
         fis = new FileInputStream(file); 
         byte b[] = new byte[fis.available()]; 
         fis.read(b); 
         String str = new String(b); 
         jta.setText(str); 
        } catch (Exception f) { 
         f.printStackTrace(); 
        } finally { 
         try { 
          fis.close(); 
         } catch (Exception exp) { 
         } 
        } 
       } 
      } 
     }); 

     mf3.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       JFileChooser chooser = new JFileChooser(); 
       chooser.showSaveDialog(null); 
      } 
     }); 


     mf4.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       JFileChooser chooser = new JFileChooser(); 
       chooser.showDialog(null, "Save As"); 
      } 
     }); 

     mf7.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       JOptionPane scd = new JOptionPane(); 
       scd.showConfirmDialog(null, "Are you want to exit"); 
      } 
     }); 
     me.add(me1); 
     me.addSeparator(); 
     me.add(me2); 
     me.add(me3); 
     me.add(me4); 
     me.add(me5); 
     me.addSeparator(); 
     me.add(me6); 
     me.add(me7); 
     me.add(me8); 
     me.add(me9); 
     me.addSeparator(); 
     me.add(me10); 
     me.add(me11); 
     me11.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       Date d1 = new Date(); 
       JOptionPane smddate = new JOptionPane(); 
       smddate.showMessageDialog(null, d1); 

      } 
     }); 

     mfo.add(mfo1); 
     mfo.add(mfo2); 

     mv.add(mv1); 

     mh.add(mh1); 
     mh.addSeparator(); 
     mh.add(mh2); 

     setSize(520, 540); 
     setVisible(true); 
    } 
} 
+0

+1 но несколько предложений как TODO/BNI 1) Начните GUI на EDT 2) верните предпочтительный размер и пакет. 3) Поскольку это Swing, используйте ['read (Reader, Object)'] (http://docs.oracle.com/javase/7/docs/api/javax/swing/text/JTextComponent.html#read%28java .io.Reader,% 20java.lang.Object% 29) - гораздо более безопасный способ загрузки файлов для текста. ;) 4) Изменить '} catch (Exception exp) { }' to '} catch (Exception exp) {exp.printStackTrace(); // очень важно! } ' –

+0

@AndrewThompson Исправлена ​​начальная нить, спасибо – MadProgrammer

1

Это происходит потому, что ваш класс расширяет JFrame и из этого JFrame вы создаете новый JFrame. Удалить линию рамки frm=new Frame(); и использовать this вместо frm

Смежные вопросы