フリーフォーム形状を描画するために拡張するクラスを使用しようとしていますがMouseInputAdapter
、これは後でアニメーション化されたオブジェクトを作成する可能性があります。
いくつかの回答を見てきましたが、それらは を使用していますaddMouseMotionListener(this)
。これは、私が理解している限り、オブジェクトでは実行できません。私の主な問題は、実際に何かを描くことです。JPanel
animate メソッドでリスナーを初期化する場所やリスナーを追加する場所など、基本的なものが欠けている可能性があります。nullPointerException
再描画すると仮定するたびに sを取得 します。それか、mouseDragged がアクティブになるたびに。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.MouseInputAdapter;
import java.util.*;
public class test {
JFrame frame = new JFrame("Bouncing Vertices");
MyDrawPanel drawPanel = new MyDrawPanel();
private int delay = 5;
public int z = 0;
public int a = 0;
public static int counter = 0;
public static int[] xs;
public static int[] ys;
public static boolean isDone = false;
public void animate() {
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(drawPanel);
frame.setSize(800, 600);
frame.setVisible(true);
MyListener alpha = new MyListener();
drawPanel.addMouseMotionListener(alpha);
drawPanel.addMouseListener(alpha);
while (true) {
drawPanel.repaint();
try {
Thread.sleep(delay);
} catch (Exception ex) {
}
}
}
private class MyListener extends MouseInputAdapter {
public void mouseDragged(MouseEvent arg0) {
int x = arg0.getX();
int y = arg0.getY();
if (x != z || y != a) {
xs[counter] = x;
ys[counter] = y;
z = x;
a = y;
counter++;
}
}
public void mouseReleased(MouseEvent arg0) {
isDone = true;
}
}
public static int[] getXs() {
return xs;
}
public static int[] getYs() {
return ys;
}
public static boolean getBoolean() {
return isDone;
}
public static void setBoolean() {
isDone = false;
}
public static void setArrays() {
for (int i = 0; i < ys.length; i++) {
xs[counter] = 0;
ys[counter] = 0;
}
}
public static void main(String[] args) {
test qwerty = new test();
qwerty.animate();
}
}
class MyDrawPanel extends JPanel {
public void paintComponent(Graphics g) {
g.setColor(Color.GRAY);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
if (test.getBoolean() && test.getXs().length > 0) {
g.setColor(Color.BLACK);
g.drawPolyline(test.getXs(), test.getYs(), test.getYs().length);
test.setBoolean();
test.setArrays();
}
}
}