鼠标定位器覆盖"绘制组件"



我正试图在MVC架构中制作一个程序,它只需打开一个具有特定设计的框架(JFrame(,当用鼠标点击某个地方时,只需打印到控制台:"某事物;通知操作成功完成,但似乎在Ouput.java类之前将Input.java类添加到框架时,后者会覆盖并禁用MouseListener,或者前者会覆盖后者,在后者中,您可以在单击框架时激活MouseLister执行某个程序,但不显示Output 中的设计

以下是提到的类文件:

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

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

Frame.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");
}
}

Controller.java

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

如何解决此问题?

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

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

有关Layout Manager 的更多信息

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

最新更新