MousePressed 및 MouseReleased의 패널에 공을 만들고 MotionListener로 좌표를 업데이트하고 마우스가 위에있을 때 공의 색상을 변경할 수 있습니다. 패널에 치수가 정의되어 있고 마우스가 내부에서 작동하기 때문에이 값은 myPanel 클래스에서 올바르게 작동합니다. 하지만 지금해야 할 일은 Ball 클래스가 Component를 확장하고 MouseListener를 구현하는 방법을 잘 모르는 것입니다. Ball 클래스에서 MouseEntered를 사용하여 볼의 색상을 변경해야합니다. 도움 말 하시겠습니까? 코드를 실행하면자바 스윙 : 마우스에서 공의 색상 변경하기 예 :
//Ball
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Ball extends JComponent implements MouseListener{
public int x,y,r;
public Color c = Color.BLUE;
private int distance = 0;
public Ball(int X, int Y, int R){
super();
x=X;
y=Y;
r=R;
addMouseListener(this);
}
public void draw(Graphics g){
g.setColor(c);
g.fillOval(x-r, y-r, 2*r, 2*r);
}
public void mousePressed(MouseEvent me){}
public void mouseReleased(MouseEvent me){ }
public void mouseClicked(MouseEvent me){}
public void mouseEntered(MouseEvent me){
c = Color.ORANGE;
}
public void mouseExited(MouseEvent me){}
}
//myPanel
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.MouseInputAdapter;
public class myPanel extends JPanel implements MouseListener{
private Color c = new Color(150,200,100);
public Ball ball = new Ball(100,100,50);
private Point mouseCoords = new Point();
public myPanel(){
super();
setLayout(new FlowLayout());
addMouseListener(this);
add(ball);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
ball.draw(g);
}
public void mousePressed(MouseEvent me){
ball.x = me.getX();
ball.y = me.getY();
labelPanel.setX(me.getX()); //Report x and y values
labelPanel.setY(me.getY());
// ball.c = Color.RED; //change color on click
repaint();
}
public void mouseReleased(MouseEvent me){}
public void mouseMoved(MouseEvent me) {}
public void mouseClicked(MouseEvent me){}
public void mouseEntered(MouseEvent me){}
public void mouseExited(MouseEvent me){}
}
// myFrame
import java.awt.*;
import javax.swing.*;
public class myFrame extends JFrame{
public myPanel left = new myPanel();
public labelPanel right = new labelPanel();
public myFrame(){
super("This is my Frame");
setLayout(new BorderLayout());
setSize(900,700);
add(left,BorderLayout.CENTER);
add(right,BorderLayout.EAST);
setVisible(true);
}
public static void main(String[] args){
myFrame mF = new myFrame();
mF.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
//labelPanel
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.MouseInputAdapter;
public class labelPanel extends JPanel{
public static JLabel xCoord = new JLabel("X=",JLabel.RIGHT);
public static JLabel yCoord = new JLabel("Y=",JLabel.RIGHT);
public Color c = new Color(100,200,10);
public labelPanel() {
super();
setBackground(c);
setLayout(new GridLayout(2,1));
add(xCoord);
add(yCoord);
}
public static void setX(int x){
xCoord.setText("X=" + x);
}
public static void setY(int y){
yCoord.setText("Y=" + y);
}
}
그래서, 그것은 앞서 언급 한 작품,하지만 난 그것을에서의 mouseEntered
아니요. 그것은 그것을 고치지 않았다. 마우스가 공 위에있을 때 입력 된 마우스는 공의 색상을 변경하지 않습니다. – SoluableNonagon
@ Student01010101 그런 다음 공을 다시 채색해야합니다. 색상을 설정 한 후에 draw()를 호출하십시오. –
내가 다시 칠해도 아무 것도 일어나지 않습니다. 어쩌면 볼 생성자는 매개 변수로 int의 무리만을 가지고 있기 때문일 것입니다. 실제로는 존재하지 않지만 draw()를 사용하여 화면 상에 객체를 표시합니다. – SoluableNonagon