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)와 같은 더 많은 봐. 모든 스윙을 유지하는 것이 가장 좋습니다. 2) 하나의 공백 라인이 항상 충분합니다! 3) 코드 블록에 일관되고 논리적 인 들여 쓰기를 사용하십시오. 코드의 들여 쓰기는 사람들이 프로그램 흐름을 이해하도록 돕기위한 것입니다. 4) 더 빨리 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. 나는 그것이 단지 1을 필요로한다고 의심되는 반면 나는 거기에 20 개 이상의 메뉴 항목을 참조하십시오. –

답변

2

this를 사용

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

당신은 Frame을 확장하지만 당신은뿐만 아니라 다른 Frame 또 다른 참조를 만들 ... 여기 시작할 수 있습니다. 대신 DemoMenu 사용

, 당신이 결코 잘 끝날 것 없습니다 또한 무겁고 가벼운 구성 요소 (AWT/스윙)을 혼합하고이 "다른"대신 frm ...

을 사용하고있는 것으로 보인다. 대신

  • Frame의, JMenu
  • MenuItem 사용 JFrame
  • Menu 사용 내가 당신이 수행해야 할 작업을 정의 할 수있는 setDefaultCloseOperation을 소개 할 수 JMenuItem

를 사용 사용하면 "x"버튼을 통해 창을 닫으려고 할 때 ...

스트림을 열면 스트림을 닫아야합니다 (파일 열기 방법 참조).

이 코드를해야

이 코드는 이상한 AWT의 혼합 (예를 들어`Frame`) 스윙 (예를 들어,`JOptionPane`)를 사용 ...

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) EDT에서 GUI를 시작 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) { }'을'catch (Exception exp) {exp.printStackTrace();로 변경한다. // 매우 중요! }' –

+0

@AndrewThompson 초기 스레드를 수정했습니다. 고맙습니다. – MadProgrammer

1

클래스가 JFrame을 확장하고 JFrame을 사용하여 새 JFrame을 만들기 때문에 이러한 현상이 발생합니다. 이 라인 프레임 frm=new Frame(); 를 제거하고 대신 좋아 frm

관련 문제