mouselistener重写绘制组件

csga3l58  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(312)

我正在尝试在mvc架构中制作一个程序,它只是打开一个具有某种设计的框架(jframe),当用鼠标单击某个地方时,它会简单地打印到控制台:“sth”通知操作成功完成,但似乎input.java类在被output.java类覆盖之前添加到框架中后者并禁用mouselistener,或者前者覆盖后者,即当单击帧时,可以激活mouselistener执行特定程序,但不显示输出中的设计
下面是提到的类文件:
input.java文件:

package MouseListenerTest;

import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JPanel;

public class Input extends JPanel implements MouseListener
{
    Input()
    {
        addMouseListener(this);
    }

    public void mouseClicked(MouseEvent e) {
        System.out.println("Ej Adiiiii");
    }

    public void mousePressed(MouseEvent e) 
    {

    }

    public void mouseReleased(MouseEvent e) 
    {

    }

    public void mouseEntered(MouseEvent e) 
    {

    }

    public void mouseExited(MouseEvent e) 
    {

    }
}

输出.java

package MouseListenerTest;

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JPanel;

public class Output  extends JPanel
{
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        g.setColor(Color.red);
        g.fillRect(0, 0, 500, 500);
    }
}

框架.java

package MouseListenerTest;

import javax.swing.*;

public class Frame
{
    Frame()
    {
        JFrame frame = new JFrame();
        frame.getContentPane().add(new Output());
        frame.getContentPane().add(new Input());
        frame.setSize(500,500);
        frame.setVisible(true);
        frame.setTitle("MouseListener test");
    }
}

控制器.java

package MouseListenerTest;

public class Controller 
{
    public static void main(String[] args)
    {
        new Frame();
    }
}

如何解决此问题?

vsmadaxz

vsmadaxz1#

您至少需要学习布局组件的基础知识。

vfwfrxfs

vfwfrxfs2#

代码中的问题是因为您将元素添加到frame的方式,而我更改为 GridLayout 并将它们添加到框架中以查看:

frame.setLayout(new GridLayout(2, 1));
frame.getContentPane().add(new Output());
frame.getContentPane().add(new Input());

有关布局管理器的详细信息

相关问题