質問は簡単です。私は "ハンドラ"という名前のクラスを作成し、そのコンストラクタ内に "c"(JComponent)のパラメータを含みます。このコンストラクタが特定のJComponent、好ましくはJPanelで呼び出されると、マウスの現在の座標に楕円が描画されます。これは、ソースコードされています。ただし、このエラーがスローされGraphics.drawOvalのNullPointerException
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
public class Handler implements MouseListener, MouseMotionListener {
Graphics g;
public Handler() {}
public Handler(JComponent c) {
if (c instanceof JPanel) {
g = c.getGraphics();
g.drawOval(mx, my, 5, 5);
}
if (c != null) {
c.addMouseListener(this);
c.addMouseMotionListener(this);
}
}
int mx, my;
public void mouseClicked(MouseEvent e) {
mx = e.getX();
my = e.getY();
}
public void mousePressed(MouseEvent e) {
mx = e.getX();
my = e.getY();
}
public void mouseReleased(MouseEvent e) {
mx = e.getX();
my = e.getY();
}
public void mouseExited(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseMoved(MouseEvent e) {
mx = e.getX();
my = e.getY();
}
public void mouseDragged(MouseEvent e) {}
}
:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
はあなたたちがこのことについてどんな考えを持っていますか?その場合は、解決策を投稿してください。
編集1
私は何か新しいことをしました。これは私の新しいコードです:
import javax.swing.*;
import java.awt.*;
public class Handler extends JPanel {
int mx = MouseInfo.getPointerInfo().getLocation().x;
int my = MouseInfo.getPointerInfo().getLocation().y;
public Handler(BorderLayout bl) {
this.setLayout(bl);
}
public void paintComponent(Graphics g23) {
Graphics2D g2 = (Graphics2D) g23;
g2.drawOval(mx, my, 30, 30);
}
}
私はコードを大きく改訂しました。今、JPanelを拡張し、JPanelの代わりになります。そこで、新しいJPanelをインスタンス化する代わりに、Handlerのコンストラクタを呼び出します。 paintComponentも実装されていますが、まだ楕円は描画されていません。しかし、エラーは発生しません。
もっと多くのスタックトレースを含むマインド? – mre
また、なぜ 'JComponent'の' Graphics'オブジェクトを取得してから、 'paintComponent(...)'の外に描画していますか?あなたは 'paintComponent(...)'をオーバーライドし、そこに描画を行うべきです。 – mre
クラスを実行可能にして、javax.swing.SwingUtilities.invokeLater()から実行する必要があります。これにより、イベントキューの健全性が確保されます。ルーチンのコーディングでの 'instanceof'の使用は、文体的に最良の動きではありません。 – ncmathsadist