私はJavaをかなり新しくしています(約8ヶ月間コーディングしています)、JPanelでシェイプを描くときにいくつか問題があります。マウスをクリックしてドラッグすると、すでに図形を描くことができます。私が持っている問題は、以下のとおりです。私は形が描かれているクラスに色を渡すしようとすると、色がシェイプを描くときにシェイプのプロパティがクラス間で正しく渡されない - Java Swing
更新し、既定の色(黒)としてとどまりません。
(setStrokeメソッドを使用して)私のシェイプのpointSizeを変更しようとすると、最初に描くシェイプがpointSizeを正しく更新しますが、次に描画するシェイプはデフォルトのpointSizeになります。 (pointSizeが新しいシェイプを描画するたびにリセットされるように見えます)
ロングストーリーショート;新しいオブジェクトをインスタンス化する方法や、他のクラスに値を渡す方法には何か問題があると思います。私は他の人の質問から答えを探していましたが、何が間違っているのか分かりません。ここ
は私のコードである:
私inputHandlerクラス:
myRectangleクラス(矩形が描画されているクラス): `パッケージ色;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
public class myRectangle implements Drawable {
private double x1, y1, x2, y2;
DrawPanel dp;
public Color color;
public static boolean paint;
public int pointSize;
public myRectangle() {
}
public myRectangle(double x1, double y1, double x2, double y2) {
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
}
@Override
public void draw(Graphics2D g) {
double x = getStartX();
double y = getStartY();
double width = getWidth();
double height = getHeight();
Rectangle2D r = new Rectangle2D.Double(x, y, width, height);
g.setColor(color);
g.draw(r);
g.setStroke(new BasicStroke(pointSize));
if(paint)
{
g.fillRect((int)x, (int)y, (int)width, (int)height);
}
System.out.println("rectangle called");
}
public boolean contains(double x, double y) {
return x >= getStartX() && x <= getEndX() && y >= getStartY() && y <= getEndY();
}
public double getWidth() {
return Math.abs(x1 - x2);
}
public double getHeight() {
return Math.abs(y1 - y2);
}
public double getStartX() {
return Math.min(x1, x2);
}
public double getStartY() {
return Math.min(y1, y2);
}
public double getEndX() {
return Math.max(x1, x2);
}
public double getEndY() {
return Math.max(y1, y2);
}
public String getShape()
{
return "Rectangle";
}
public void setStroke(int stroke)
{
pointSize = stroke;
}
public void setColor(Color color)
{
this.color = color;
}
}`
私DrawPanelクラス(JPanelの上に図形を描画するクラス): `パッケージの色。ここ
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.util.ArrayList;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class DrawPanel extends JPanel
{
public ArrayList<Drawable> shapesList = new ArrayList<Drawable>();
public static int pointSize;
public DrawPanel()
{
super();
}
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
// Cast the graphics object to type Graphics2D
Graphics2D g2d = (Graphics2D) g;
// Loop through the shapesList and draw every shape
for(Drawable s : shapesList)
{
s.draw(g2d);
}
}
}`
そして最後に私のプログラムがどのように見えるかの基本的な理解を得るための画像です:image of my program
は、私は、これは多くのコードですけど、私はしばらくの間、これらの問題にstruggelingされています今私は何が間違っているのか分かりませんので、ついに投稿をすることに決めました。
ご協力いただきありがとうございます。
-Mick
「約8ヶ月間コーディングしています」 - クラス名は大文字で始まることがわかります。 Javaの規約に従ってください。 – camickr
新しいペイントサイクル – MadProgrammer