我有一個Java繪畫程序,我有兩個問題需要處理。這兩個問題都比較簡單,只是考慮如何處理鼠標輸入以及圖像如何使用顏色。這裏的應用程序的照片:關於Java繪畫程序在繪畫時出現多個問題
因此,這裏是我的第一個問題:
正如你所看到的,通過應用程序的外觀,有一個在油漆區點的噴霧。每個點都是鼠標點擊。該程序無法識別用戶何時按住鼠標按鈕,因此您必須單獨單擊。
這顯然會適得其反,用戶不友好且不可接受。現在,我如何解決這個問題,我不確定。我嘗試過使用永久性的while (true)
循環,但這不起作用。我該如何做到這一點,而不是每次都點擊鼠標,每次按下鼠標時都會噴出點?
第二個問題是點的顏色。正如你所看到的,底部有顏色按鈕。這些功能,但有一個問題:每當我改變顏色,屏幕上當前所有的點改變顏色。顏色由稱爲currentColor
的變量運行,該變量由由底部面板上的所有顏色按鈕控制的actionListeners運行。我如何確保已放置在屏幕上的顏色不再受影響?
我相信所有可以解決這兩個問題的代碼都在我自定義的JPanel
中,該程序用於程序繪製。我將在下面發佈整個課程,如果您有任何其他問題,請告訴我。
int xCord, yCord;
public class PaintPanel extends JPanel implements MouseListener {
// default serial whatever...
private static final long serialVersionUID = -6514297510194472060L;
public PaintPanel() {
addMouseListener(this);
}
ArrayList<Point> points = new ArrayList<Point>();
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
for (Point point : points) {
g.setColor(currentColor);
g.fillOval(point.x, point.y, 12, 12);
}
repaint();
}
@Override
public void mouseClicked(MouseEvent m) {
}
@Override
public void mouseEntered(MouseEvent m) {
}
@Override
public void mouseExited(MouseEvent m) {
}
@Override
public void mousePressed(MouseEvent m) {
if (paintPanel.contains(m.getPoint())) {
points.add(m.getPoint());
xCord = m.getX();
yCord = m.getY();
System.out.println("x: " + xCord + " y: " + yCord);
}
}
@Override
public void mouseReleased(MouseEvent m) {
}
}
開始通過在考慮看看[如何寫的鼠標移動偵聽器(http://docs.oracle.com/javase/tutorial/uiswing/events/mousemotionlistener .html) – MadProgrammer
閣下,千萬不要從'paintComponent(...)'裏面調用'repaint()'。永遠。我的意思是永遠。 –
@HovercraftFullOfEels我以前聽說過。你能向我解釋爲什麼,或給我一個鏈接,或什麼?這會爲我節省很多時間。謝謝。 – user2398233