Я использую 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);
}
}