나는 mousebutton의 릴리스에 약간의 픽셀을 이동하도록되어이 코드 조각이 : 디버거의Java 6 : 행을 드래그/이동하는 방법?
if (selected != -1) {
Point to = e.getPoint();
int dx = start.x - to.x;
int dy = start.y - to.y;
for (Point p: store.get(selected)) {
int px = (int) p.getX();
int py = (int) p.getY();
p.move(px - dx, py - dy);
}
validate();
사용이 그 점 P의 참 얻을 새 값을 보여줍니다하지만 영상은 업데이트되지 않습니다. 제발 도와주세요.
다음은 내 프로그램의 전체 코드입니다.
public class Pisi extends JFrame implements MouseMotionListener, MouseListener {
ArrayList<ArrayList<Point>> store = new ArrayList<ArrayList<Point>>();
ArrayList<Point> pts = new ArrayList<Point>();
Point start;
static int xsize = 450;
static int ysize = 300;
int listNumber = 0;
int selected = -1;
public static void main(String[] args) {
Pisi d = new Pisi();
d.setSize(xsize, ysize);
d.setLocationRelativeTo(null);
d.addMouseMotionListener(d);
d.addMouseListener(d);
d.setResizable(false);
d.setVisible(true);
}
@Override
public void update(Graphics g) {
paint(g);
}
@Override
public void paint(Graphics g) {
Point last = null;
for (Point p : pts) {
if (last == null) {
last = p;
continue;
}
g.drawLine(last.x, last.y, p.x, p.y);
last = p;
}
}
@Override
public void mouseDragged(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON1) {
pts.add(e.getPoint());
repaint();
}
}
@Override
public void mouseMoved(MouseEvent e) {
//To change body of implemented methods use File | Settings | File Templates.
}
@Override
public void mouseClicked(MouseEvent e) {
//To change body of implemented methods use File | Settings | File Templates.
}
@Override
public void mousePressed(MouseEvent e) {
Point point = e.getPoint();
start = null;
selected = -1;
for (ArrayList<Point> points: store) {
for (Point p : points) {
double dist = point.distanceSq(p);
if (dist < 10) {
selected = store.indexOf(points);
}
}
}
if (selected != -1) {
start = e.getPoint();
}
System.out.println(selected);
}
@Override
public void mouseReleased(MouseEvent e) {
if (selected != -1) {
Point to = e.getPoint();
int dx = start.x - to.x;
int dy = start.y - to.y;
for (Point p: store.get(selected)) {
int px = (int) p.getX();
int py = (int) p.getY();
p.move(px - dx, py - dy);
}
validate();
} else if (e.getButton() == MouseEvent.BUTTON1 && pts.size() != 0) {
store.add(new ArrayList<Point>(listNumber));
for (int i = 0; i < pts.size(); i++) {
store.get(listNumber).add(pts.get(i));
}
listNumber++;
}
pts.clear();
}
@Override
public void mouseEntered(MouseEvent e) {
//To change body of implemented methods use File | Settings | File Templates.
}
@Override
public void mouseExited(MouseEvent mouseEvent) {
//To change body of implemented methods use File | Settings | File Templates.
}
}
처음부터 JFrame에서 직접 그리지 않아야합니다. 아직 Swing 그래픽 튜토리얼을 들었습니까? 그렇지 않다면 그렇게하는 것이 좋습니다. –