MouseListener в графике Java - PullRequest
       1

MouseListener в графике Java

0 голосов
/ 10 октября 2018

Я использую Mouselistener, чтобы открыть глаза, когда MouseInside имеет значение true, и закрыть, когда MouseInside имеет значение false.(иначе, когда мышь нависает над головой, глаза открыты, а когда нет, они закрыты).Я начал с создания класса Head, расширяющего JPanel, и создания приватного логического mouseInside.Затем я создал измерение, добавил границу, а затем создал вложенный класс MyMouseListener, который инициализировал логическое значение как true или false в зависимости от положения мыши, а затем вызвал repaint.Затем я добавил слушатель мыши к моему объекту головы.Ниже я построил свой объект Head и объекты eye в зависимости от того, было ли логическое значение mouseInside истинным или ложным.Ниже я создал свой JFrame для демонстрации и конструирования Head.

Я не уверен, почему он не работает, вот мой код (я новый программист) ..

import java.awt.*;

import java.awt.geom.*;

import javax.swing.*;

import javax.swing.border.*;

import java.awt.event.*;

public class Head extends JPanel

{

private boolean mouseInside;

public Head(boolean mouseInside)

{

this.setPreferredSize(new Dimension(500, 500));

this.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));

class MyMouseListener extends MouseAdapter {

public void mouseEntered(MouseEvent e) {

final boolean mouseInside = true;

repaint();

}

public void mouseExited(MouseEvent e) {

final boolean mouseInside = false;

repaint();

}

}

this.addMouseListener(new MyMouseListener());

}

@Override public void paintComponent(Graphics g) {

super.paintComponent(g);

Graphics2D g2 = (Graphics2D)g;

//face

g2.setStroke(new BasicStroke(3.0f));

g2.setPaint(Color.YELLOW);

g2.fill(new Ellipse2D.Double(10, 200, 120, 140));

//eyes.. open in mouseinside is true and closed if not

if (mouseInside == true) {

g2.setPaint(Color.WHITE);

g2.fill(new Ellipse2D.Double(90, 250, 20, 20));

g2.setPaint(Color.WHITE);

g2.fill(new Ellipse2D.Double(40, 250, 20, 20));

}

else if (mouseInside == false) {

g2.setPaint(Color.BLACK);

g2.fill(new Rectangle2D.Double(90, 250, 20, 5));

g2.setPaint(Color.BLACK);

g2.fill(new Rectangle2D.Double(40, 250, 20, 5));

}

//nose

g2.setPaint(Color.ORANGE);

g2.fill(new Rectangle2D.Double(65, 270, 20, 20));

//mouth

g2.setStroke(new BasicStroke(4.0f));

g2.setPaint(Color.RED);

g2.fill(new RoundRectangle2D.Double(50,300,50,15,15,10));

}

public static void main(String[] args) {

JFrame f = new JFrame("Head demo");

f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

f.setLayout(new FlowLayout());

f.add(new Head(true));

f.add(new Head(false));

f.add(new Head(false));

f.pack();

f.setVisible(true);

}

}

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Просто удалите параметр mouseInside, который вы передаете конструктору класса Head, или измените его имя.Ваша переменная класса mouseInside затенена этим параметром.

0 голосов
/ 10 октября 2018

Это очень трудно прочитать ваш код в формате.Однако у вас, кажется, есть переменная с одним и тем же именем в разных областях.

final boolean mouseInside = false;

Ничего не собирается делать.Удалить final boolean.(Старое ограничение на доступ к final s включающего контекста касалось только параметров и локальных элементов методов и конструкторов, а не полей объектов и классов.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...