MouseListener 覆盖 Paint 组件
MouseListener overriding Paint Component
我正在尝试在 MVC 体系结构中制作一个程序,它只需打开一个具有特定设计的框架 (JFrame),当用鼠标单击某处时,只需打印到控制台:“sth”通知操作已完成成功但似乎 Input.java class 在 Ouput.java class 之前添加到框架时被后者覆盖并禁用 MouseListener,或者前者覆盖后者单击框架时能够激活执行特定程序的 MouseListener,但不显示在 Output
中所做的设计
这里是提到的 class 个文件:
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());
您至少需要学习 laying out components 的基础知识。
我正在尝试在 MVC 体系结构中制作一个程序,它只需打开一个具有特定设计的框架 (JFrame),当用鼠标单击某处时,只需打印到控制台:“sth”通知操作已完成成功但似乎 Input.java class 在 Ouput.java class 之前添加到框架时被后者覆盖并禁用 MouseListener,或者前者覆盖后者单击框架时能够激活执行特定程序的 MouseListener,但不显示在 Output
中所做的设计这里是提到的 class 个文件:
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());
您至少需要学习 laying out components 的基础知识。