2014-05-12 5 views
1

복사/붙여 넣기 및 txt 파일에 저장할 수있는 클립 보드 프로그램을 작성하려고합니다. 프로그램이 작동하는 동안 MenuItems, 이있는 메뉴로 단추를 변경하려고합니다. 메뉴 항목을 패널에 추가 할 수 없으므로 메뉴 항목을 올바르게 사용하는 방법을 알 수 없습니다.자바 메뉴 AWT 패널에

주의 사항 AWT를 사용하고 있으며 스윙이 아니므로 JPanel/JFrame 등이 없습니다. 팁/도움을 주시면 감사하겠습니다.

이 메뉴로 변경에서 내 코드와 시도는, 제가 뭘 잘못 알려 주시기 바랍니다 :

import java.awt.*; 
import java.awt.event.*; 
import java.io.*; 

public class CheesyWP extends Frame implements ActionListener { 

    /** 
    * @param args 
    */ 

    //new panel for menu 
    Panel north; 

    //original 
    Panel center; 
    Panel south; 
    Button save; 
    Button load; 
    Button clip; 
    Button finish; 
    Menu mn; 
    MenuItem mSave; 
    MenuItem mLoad; 
    MenuItem mClip; 
    MenuItem mFinish; 
    TextArea ta; 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     CheesyWP cwp = new CheesyWP(); 
     cwp.doIt(); 

    } 

    public void doIt() { 
     center = new Panel(); 
     south = new Panel(); 
     clip = new Button("Open Clipboard"); 
     save = new Button("Save"); 
     load = new Button("Load"); 
     finish = new Button("Finish"); 

     //menu items 
     north = new Panel(); 
     mn = new Menu(); 
     mSave = new MenuItem("Save"); 
     mLoad = new MenuItem("Load"); 
     mClip = new MenuItem("Open Clipboard"); 
     mFinish = new MenuItem("Finish"); 
     mn.add(mSave); 
     mn.add(mLoad); 
     mn.add(mClip); 
     mn.add(mFinish); 
     mSave.addActionListener(this); 
     mLoad.addActionListener(this); 
     mClip.addActionListener(this); 
     mFinish.addActionListener(this); 
     //north.add(mn); <-------//PROBLEM HERE 

     clip.addActionListener(this); 
     save.addActionListener(this); 
     load.addActionListener(this); 
     finish.addActionListener(this); 
     ta = new TextArea(20, 80); 
     center.add(ta); 
     south.add(load); 
     south.add(save); 
     south.add(clip); 
     south.add(finish); 
     this.add(center, BorderLayout.CENTER); 
     this.add(south, BorderLayout.SOUTH); 
     this.setSize(600, 300); 
     this.setVisible(true); 
    } 

    public void actionPerformed(ActionEvent ae) { 
     if (ae.getSource() == save) { 
      try { 
       File junk = new File("junk.txt"); 
       FileWriter fw = new FileWriter(junk); 
       fw.write(ta.getText()); // write whole TextArea contents 
       fw.close(); 
      } catch (IOException ioe) { 
      } 
     }// ends if 
     if (ae.getSource() == load) { 
      String temp = ""; 
      try { 
       File junk = new File("junk.txt"); 
       FileReader fr = new FileReader(junk); 
       BufferedReader br = new BufferedReader(fr); 
       while ((temp = br.readLine()) != null) { 
        ta.append(temp + "\n"); 
       } 
       br.close(); 
      } catch (FileNotFoundException fnfe) { 
      } catch (IOException ioe) { 
      } 
     } 
     if (ae.getSource() == finish) { 
      System.exit(0); 
     } 
     if(ae.getSource()==clip){ 
      new ClipBoard(); 
     } 
    } 

    class ClipBoard extends Frame { 
     public ClipBoard() { // a constructor 
      this.setTitle("Clipboard"); 
      this.setLayout(new FlowLayout()); 
      this.add(new TextArea(10, 50)); 
      this.setSize(400, 160); 
      this.setVisible(true); 
     } 
    } 
} 
+0

' "나는 통지하십시오 –

+0

* "스윙이 아닌 AWT를 사용하고 있으므로 JPanel/JFrame 등은 사용하지 않습니다."* *** 왜 *** AWT가 아닌 스윙인가? AWT 구성 요소를 사용하여 포기해야하는 많은 이유 때문에 [AWT를 통한 스윙 엑스트라] (http://stackoverflow.com/a/6255978/418556)에서 내 대답을 참조하십시오. –

답변

0

그냥 도구 모음이

Panel north; 

이 AWT 라이브러리를 사용하여, 당신은 패널에 메뉴를 추가 할 수 없기 때문에, 그러나 당신이 추가 할 수 있습니다

MenuBar north; 

메뉴로 변경 스윙이 아닌 AWT를 사용하고 있습니다. 따라서 JPanel/JFrame은 없습니다 ... "- 정식으로 언급되었지만 왜 그런지 궁금합니다. AWT는 1998 년 이래로 시대에 뒤떨어져 있습니다. AWT를 사용하는 사람이 거의 없으므로 전문가가 귀하의 질문에 대답하기 어려울 수도 있습니다.

+0

그런데 어떻게 응용 프로그램에 MenuBar를 추가합니까? – user3011161

+0

은 지금 작동중인 코드입니까? – MCHAppy

+0

"Panel north;"를 "MenuBar north"로 변경 한 후 "north = new Panel();"을 "north = new MenuBar();"로 자동 변경해야합니다. 그러면 문제가 "north.add (mn) ; " – MCHAppy

0
this.validate(); 

스윙 구성 요소가 무효가되는 기본 상태를하지 않습니다 컴퍼넌트 자체 또는 부모 컨테이너 중 하나에서 .validate() 메서드를 호출하여 유효성을 검사하지 않는 한 화면에 그려집니다.

관련 문제