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);
}
}