我目前正在嘗試編寫一個Java應用程序,該程序允許寫意畫和後來的移動和刪除每個繪製的圖形。用手繪圖撤消和移動功能
我猜我最好的選擇是每次點擊和拖動創建一個單獨的實體,但我不知道如何實現這一點。到目前爲止,我只有一個小型的JFrame,它會在Oracle教程的幫助下顯示一個「筆刷」,但是甚至不會畫出這個筆畫的線條。
class MyPanel extends JPanel {
private int ovalX = 50;
private int ovalY = 50;
public MyPanel() {
setBorder(BorderFactory.createLineBorder(Color.black));
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
moveSquare(e.getX(),e.getY());
}
});
addMouseMotionListener(new MouseAdapter() {
public void mouseDragged(MouseEvent e) {
moveSquare(e.getX(),e.getY());
}
});
}
private void moveSquare(int x, int y) {
int OFFSET = 1;
if ((ovalX!=x) || (ovalY!=y)) {
ovalX=x;
ovalY=y;
repaint();
}
}
public Dimension getPreferredSize() {
return new Dimension(250,200);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLACK);
g.fillOval((ovalX - 5),(ovalY - 5),10,10);
}
}
我不知道我該如何繼續。我應該首先使用一些通用教程嗎?如果是這樣,關於什麼主題?
*「我猜我最好的選擇是讓每個點擊並拖動創建一個單獨的實體,但我不知道如何實現這一點。「*不要忘記用於生成圖形的'Color','Stroke','RenderingHints'等。它比你想象的更加艱難。當部分完成爲[繪畫撤銷/重做功能]創建許多這些東西的序列化版本時(http://stackoverflow.com/questions/12780063/command-pattern-for-undo-redo-in-paint-application) ,我認爲創建結果的'BufferedImage'更容易,並且存儲它。 –
我理想中的想法是存儲某種波形的光柵圖像,而不是所有的點和屬性。然後我會注意到查看一些BufferedImage教程。 – Klaabu