問題: ユーザーの操作に基づいてキャンバスを新しいペイント オブジェクトで更新しようとしています。キャンバスは更新されません。
私がやったこと:ユーザーはDnDアクションと対話し、転送可能なオブジェクトがキャンバスに到達し、私が作成したグラフィックスの更新メソッドを呼び出します。そして、このメソッドは、既に作成されたグラフィックス 2D オブジェクトを使用し、それを使用して画像を描画するだけです。DnD アクションを確認しました。オブジェクトはキャンバス クラスで適切に受信され、System.out.println を使用してそれらを印刷できました。
私のものと同様の機能を持つサンプルコード、
塗装クラス:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JPanel;
public class PaintPanel extends JPanel{
private Graphics2D drawImage;
public PaintPanel()
{
}
@Override
public void paint(Graphics g) {
drawImage = (Graphics2D) g;
drawImage.setColor(Color.WHITE);
drawImage.fillRect(0, 0, getWidth(), getHeight());
}
public void updateGraphics(int length,int width)
{
drawImage.setColor(Color.black);
drawImage.drawRect(100, 150, length, width);
repaint();
}
}
メインフレーム クラス:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class MainPaint extends JFrame{
public MainPaint()
{
setTitle("test paint");
setSize(400,400);
setLayout(new BorderLayout());
final PaintPanel paintPan = new PaintPanel();
JButton testButon = new JButton("Display shape");
add(paintPan,BorderLayout.CENTER);
add(testButon,BorderLayout.PAGE_END);
testButon.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
paintPan.updateGraphics(50,50);
repaint();
}
});
setVisible(true);
}
public static void main(String[] args)
{
new MainPaint();
}
}