MouseListener переопределяет компонент рисования

#java #swing #model-view-controller #paintcomponent #mouselistener

#java #качать #модель-представление-контроллер #Компонент рисования #mouselistener

Вопрос:

Я пытаюсь создать программу в архитектуре MVC, которая просто открывает фрейм (JFrame) с определенным дизайном и при щелчке где-либо мышью просто выводит на консоль: «sth», уведомляя, что действие прошло успешно, но кажется, что Input.java класс при добавлении во фрейм передOuput.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) 
    {

    }
}
 

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

Как мне решить эту проблему?

Ответ №1:

проблема в вашем коде заключается в том, что способ, которым вы добавили элементы в frame, и я изменил на a GridLayout и добавил их в frame, чтобы увидеть оба:

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

дополнительная информация о Layout Manager

Комментарии:

1. Вы путаете GridLayout и BorderLayout.

Ответ №2:

Вам нужно будет изучить, по крайней мере, основы компоновки компонентов.