2014-05-12 33 views
1

我想写一个剪贴板程序,可以复制/粘贴并保存到一个txt文件。 虽然程序正常工作,但我试图将按钮更改为MenuItems菜单,但是,我无法弄清楚如何正确使用菜单项,因为我无法将其添加到面板。Java菜单AWT到面板

请注意我使用AWT而不是Swing,所以没有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

'“请注意我我正在使用AWT而不是Swing,所以没有JPanel/JFrame ......“ - 正式指出,但我很好奇为什么?自1998年以来,AWT已经过时。请注意,由于现在很少有人使用AWT,因此您可能很难找到专家来回答您的问题。 –

+0

*“请注意,我使用的是AWT而不是Swing,因此没有JPanel/JFrame等。”* ***为什么选择AWT而不是Swing?看到我对[Swing extras over AWT]的回答(http://stackoverflow.com/a/6255978/418556)有很多很好的理由放弃使用AWT组件。 –

回答

0

只要改变这个

Panel north; 

对此

MenuBar north; 

因为使用AWT库,你不能添加菜单面板,但您可以添加菜单到菜单栏

+0

那么,如何将MenuBar添加到应用程序?你的代码现在工作了吗? – user3011161

+0

? – MCHAppy

+0

改变“Panel north;”为“MenuBar north”后,您应该自动将“north = new Panel();”更改为“north = new MenuBar();”现在您的问题已解决“north.add(mn) ;“ – MCHAppy

0
this.validate(); 

Swing组件有被无效,默认状态下不会除非经过验证(通过在组件本身或其中一个父容器上调用.validate()方法),将其绘制到屏幕上。