2015-11-19 36 views
0

我正在編寫一個代碼,在鼠標單擊時顯示一個矩形,並將其存儲在arraylist中,我想添加一個菜單以向用戶提供選項以將該形狀保存到文件中並加載它。如何將Jmenubar添加到mouseclick程序?

所以我結合了舊的菜單類,我一直在使用鼠標點擊類,當我運行時,我只有一個空的JFrame框沒有菜單,並且當我點擊任何地方時不顯示矩形框。在控制檯中有一個非法的ArgumentExpression。

代碼工作完美,直到我添加第三類,所以哪部分是錯誤的?

頭等艙:

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

public class MouseClick{ 
    private static int x,y; 
    private static DrawingObjects object = new DrawingObjects(); 
    private static MenuDemo menu = new MenuDemo(); 

    public static void main(String[] args){ 

     JFrame frame = new JFrame("MouseClick"); 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(400, 400); 
     frame.add(object); 
     frame.add(menu); 
     object.addMouseListener(new AL()); 
    } 
    static class AL extends MouseAdapter{ 
     public void mouseClicked (MouseEvent e){ 
      x = e.getX(); 
      y = e.getY(); 
      object.drawing(x, y); 
     } 
    } 
} 

二等:

import javax.swing.*; 
import java.awt.*; 
import java.util.*; 
public class DrawingObjects extends JPanel{ 
    private ArrayList<Point> points = new ArrayList<>(); 


    public void drawing(int x, int y){ 
     points.add(new Point(x, y)); 
     repaint(); 
    } 
    public void paintComponent(Graphics g){ 
     super.paintComponent(g); 
     for(Point p : points){ 
      g.fillRect(p.x, p.y, 20, 20); 

     } 
    } 
    } 

三等:

import java.awt.*; 
import javax.swing.*; 

public class MenuDemo extends JFrame { 
    JMenu mnuFile, mnuExit, mnuitemSaveAs; 
    JMenuItem mnuitemNew, mnuitemSave, mnuitemDoc, mnuitemTxt, mnuitemDat; 
    public MenuDemo(){ 
     Container container = getContentPane(); 
     container.setLayout(new FlowLayout()); 

     mnuFile = new JMenu("File"); 
     mnuExit = new JMenu("Exit"); 

     mnuitemNew = new JMenuItem("New"); 
     mnuitemSave = new JMenuItem("Save"); 
     mnuitemSaveAs = new JMenu ("Save As"); 

     mnuitemDoc = new JMenuItem(".doc"); 
     mnuitemTxt = new JMenuItem(".txt"); 
     mnuitemDat= new JMenuItem(".dat"); 

// menu bar 
     JMenuBar jmb = new JMenuBar(); 
     setJMenuBar(jmb); 

     mnuFile.add(mnuitemNew); 
     mnuFile.add(mnuitemSave); 
     mnuFile.add(mnuitemSaveAs); 
     mnuitemSaveAs.add(mnuitemDoc); 
     mnuitemSaveAs.add(mnuitemTxt); 
     mnuitemSaveAs.add(mnuitemDat); 

     jmb.add(mnuFile); 
     jmb.add(mnuExit); 

    } 
    } 

回答

2

你MenuDemo類擴展JFrame的。您無法將JFrame添加到其他JFrame。 MouseClick類中的main方法必須調用frame.setJMenuBar

我建議你改變你的MenuDemo類來將它的JMenuBar存儲在一個字段中,就像所有菜單和菜單項一樣,所以其他類(如MouseClick)也能夠訪問它。