私は、MouseListenersを使って線を描画し、paintComponentメソッドをオーバーライドしようとしています。私は自分のpaintComponentをパネル上に描画するように設定しました。しかし、今はパネルをクリックしてマウスを別のポイントにドラッグして線を作成するように変更する必要があります。私はこれらのチュートリアルをすべて読んできましたが、私はまだかなり失われています。私を導くことができる人は誰ですか?マウスリスナーメソッドにJPanelで線をドラッグして描画する方法は?
package gui;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.geom.Line2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class DrawPanel extends JPanel {
private static final long serialVersionUID = 1697489704611349844L;
/** The width of the panel. */
private static final int WIDTH = 600;
/** The height of the panel. */
private static final int HEIGHT = 300;
/** The stroke width in pixels. */
private static final int STROKE_WIDTH = 1;
/** The width for the rectangle. */
private static final int RECTANGLE_WIDTH = 50;
/** The height for the rectangle. */
private static final int RECTANGLE_HEIGHT = 50;
public DrawPanel() {
super();
setBackground(Color.WHITE);
setPreferredSize(new Dimension(WIDTH, HEIGHT));
}
class LineListener implements MouseListener, MouseMotionListener {
@Override
public void mouseClicked(MouseEvent theEvent) {
theX = theEvent.getX();
theY = theEvent.getY();
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseDragged(MouseEvent theEvent) {
// TODO Auto-generated method stub
}
@Override
public void mouseMoved(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void paintComponent(final Graphics theGraphics) {
super.paintComponent(theGraphics);
final Graphics2D g2d = (Graphics2D) theGraphics;
// for better graphics display
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
final Shape line = new Line2D.Double(10, 10, 100, 100);
g2d.setPaint(Color.ORANGE);
g2d.setStroke(new BasicStroke(STROKE_WIDTH));
g2d.draw(line);
}
public static void main(final String[] theArgs) {
final DrawPanel panel = new DrawPanel();
final JFrame frame = new JFrame("Drawing Panel Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(panel);
frame.pack();
frame.setVisible(true);
frame.setLocationRelativeTo(null);
}
}
ええ私はちょうど線の描画がどのように動作するかを知るために、数値を目的に合わせてハードコードしました。私の問題は、MouseListenersの実装方法を理解することです。 – Jasmine
@ジャスミン:質問自体の問題を解決しようとする試みが示されていないので、あなたの質問は改善されるはずです。常にあなたの試みを投稿してください。そうしないと、あなたを助ける方法がわかりません。つまり、将来、マウスリスナーに関する質問があれば、マウスリスナーで何をしようとしているのかを示す必要があります。 –
これは私の問題です。私はこれにアプローチする方法を理解していないので、実際には何の試みもありません。私が知っている唯一のことは、MouseListenerメソッド内で自分のポイントを取得しgetYする必要があることですが、それだけです。 – Jasmine