#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());
Комментарии:
1. Вы путаете GridLayout и BorderLayout.
Ответ №2:
Вам нужно будет изучить, по крайней мере, основы компоновки компонентов.