- 내 첫 알고리즘이 필요
을 이상 누르고 있으면 마우스 커서가 무례한 행동 iterator를 사용하여 사각형을 반복하는 것은 예상대로 작동하지 않습니다. 커서는 첫 번째 사각형 위로 마우스를 가져갈 때만 바뀌고 다른 사각형에서는 커서가 바뀌고 커서가 커서가 움직이고 있음을 콘솔을 통해 나타내지도 않습니다 그 (것)들의 위? !!
- 내 두 번째 솔루션도 제대로 작동하지 않습니다. for 루프를 사용하여 직사각형을 반복합니다. 사각형을 통해 콘솔 위로 마우스를 가져 가면 커서가 마지막 사각형을 제외하고 바뀌지 않습니다. .
- 이 SSCCE에서 JPanel을 사용합니다. JTextPane을 사용하여 문제가 발생하기 때문입니다. 코딩 방법이 문제가 있다고 가정합니다.
나는 응답과 성능을 향상시키기 위해 스레드를 필요로할지 모르지만 접근 방법에 대해서는 확신 할 수 없다고 생각합니다. 사전에 감사드립니다.
public class UnstableCursor extends JPanel{
Rectangle2D rec;
ArrayList<Rectangle2D> recList = new ArrayList<>();
public UnstableCursor(){
}
public static void main(String[] args) {
UnstableCursor uc = new UnstableCursor();
JFrame frame = new JFrame();
Mover mv = new Mover(uc);
uc.addMouseListener(mv);
uc.addMouseMotionListener(mv);
JScrollPane jx = new JScrollPane(uc);
frame.getContentPane().add(jx);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500,500);
frame.setVisible(true);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponents(g);
Graphics2D g2d = (Graphics2D)g;
int x = 5;
for(int i = 0;i < 4;i++){
g2d.setColor(Color.red);
rec = new Rectangle2D.Double(20,x,100,5);
g2d.draw(rec);
recList.add(rec);
x += 50;
}
System.out.println("RecList is: " +recList.size());
}
}
class Mover extends MouseInputAdapter{
UnstableCursor uc;
Rectangle2D rec;
ArrayList<Rectangle2D> reList;
public Mover(UnstableCursor ucc){
uc = ucc;
}
@Override
public void mouseDragged(MouseEvent e) {
super.mouseDragged(e);
Point p = e.getPoint();
System.out.println("xxxx");
}
@Override
public void mouseMoved(MouseEvent e) {
Point p = e.getPoint();
reList = uc.recList;
//System.out.println("List is: "+reList.size());
Iterator <Rectangle2D> recs = reList.iterator();
//--------------------- First Algorithm ----------------------//
if(recs.hasNext()){
rec = recs.next();
if(rec.contains(p)){
System.out.println("inside the rectangle....");
uc.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
}
else{
uc.setCursor(Cursor.getDefaultCursor());
}
}
//--------------------- Second Algorithm ---------------------//
int r = 0;
for(int i = 0;i<(reList.size());i++){
rec = reList.get(r);
//System.out.println("Rect No: "+r+"X: "+rec.getX()+"Y: "+rec.getY());
r++;
if(rec.contains(p)){
System.out.println("inside the rectangle....");
uc.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
}
else{
uc.setCursor(Cursor.getDefaultCursor());
}
}
}
}
@camikr 당신은 내 stackoverflow 가장 큰 영웅 중 하나입니다 !!!!-) 나는 아직도 초보자입니다. 많은 예제를 사용합니다. 대답을 감사드립니다. 나는 실제로 회 돌이 응답을 사용하여 'break'키워드. 추가 설명이 필요한 부분은 직사각형을 만들어서 페인팅 메서드의 배열에 추가해서는 안된다는 것입니다. 그래서 당신이 조언을 사각형 생성 및 목록 생성자 이동하지만 어떻게 그릴 것인가? 내 그래픽 객체는 생성자에서 생성되는 사각형의 수를 어떻게 인식합니까? – Afroid1000
@ Afroid1000,'그래픽 객체가 생성자에서 생성되는 사각형의 수를 어떻게 인식하나요? '- 나는 그 질문을 이해하지 못합니다. 검색 알고리즘에서 LIst를 반복하는 방법을 알고 있습니다. 그럼 페인팅 코드에서 똑같이하십시오. 목록의 모든 항목을 반복하고 각 사각형을 칠합니다. – camickr
나는 지금 너를 가졌어. 나는 List 인스턴스를 페인트 메서드로 지나치게하고 그 내용을 그리기 위해 반복한다. 감사합니다. – Afroid1000