java - 如何将Jmenubar添加到mouseclick程序中?

标签 java swing jframe mouseclick-event jmenu

我正在编写一个代码,在鼠标单击时显示一个矩形并将其存储在数组列表中,我想添加一个菜单来为用户提供将形状保存在文件中并加载它的选项。

因此,我将我一直在使用鼠标单击类的旧菜单类组合起来,当我运行时,我只得到一个空的 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);

    }
    }

最佳答案

您的 MenuDemo 类扩展了 JFrame。您不能将一个 JFrame 添加到另一个 JFrame。 MouseClick 类中的 main 方法必须调用 frame.setJMenuBar

我建议您更改 MenuDemo 类,将其 JMenuBar 存储在一个字段中,就像所有菜单和菜单项一样,以便其他类(如 MouseClick)能够访问它。

关于java - 如何将Jmenubar添加到mouseclick程序中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33815580/

相关文章:

Java 字符串数组最大最小唯一出现

Java.net.SocketException : Invalid argument: create In mapped drive

java - 将 Bitmap 转换为 ByteArray,反之亦然

java - 在线程进行额外处理之前和之后重新绘制玻璃板

java - JTextField 未读取用户的输入

java - 在 JFrame 中显示外部文件内容的问题

java - 我很难弄清楚如何覆盖父类(super class)中的部分 "toString"方法(多态性)

java - 如何在 JScrollPane 之上绘制?

java - 单击按钮时在 JPanel 中加载图像

java - 如何使用 JButton 保存首选项?