我正在嘗試創建一個界面,用戶可以更改線條的顏色以標記背景或圖像的前景。到目前爲止,我已經編寫了這一點:如何在JAVA中設置運行時的筆觸顏色?
private class ImageLine extends JComponent
{
java.awt.Point p1,p2;
BufferedImage show;
ArrayList <Shape> shapes = new ArrayList<Shape>();
int flag = 0;
Color color = Color.ORANGE;
public ImageLine(BufferedImage img)
{
show = img;
setPreferredSize(new Dimension(img.getWidth(), img.getHeight()));
this.addMouseListener
(
new MouseAdapter()
{
@Override
public void mousePressed(MouseEvent e)
{
p1 = e.getPoint();
}
@Override
public void mouseReleased(MouseEvent e)
{
p2 = e.getPoint();
Shape r = createLine(p1.x,p1.y,e.getX(),e.getY());
shapes.add(r);
repaint();
}
@Override
public void mouseDragged(MouseEvent e)
{
mouseReleased(e);
repaint();
}
}
);
this.addKeyListener(
new KeyAdapter()
{
@Override
public void keyPressed(KeyEvent e)
{
if(e.getKeyChar() == 'b')
{
color = Color.GREEN;
System.out.println("bck");
}
if(e.getKeyChar() == 'f')
{
color = Color.RED;
System.out.println("fgr");
}
}
}
);
this.setFocusable(true);
}
private Line2D.Float createLine(int x1, int y1, int x2, int y2)
{
return new Line2D.Float(x1,y1 ,x2, y2);
}
直到這部分一切正常,我的真正的問題是,當我嘗試覆蓋paintComponent()方法,在這裏其實我不知道如何設置顏色爲KeyListener的表示在這種情況下,如果用戶按下「b」鍵,線的顏色必須改變爲綠色,另一方面,如果用戶按下「f」鍵,線的顏色必須改變爲紅色,如果用戶繪製不同的線,則這些線必須保持顯示。我已經使用此代碼嘗試沒有sucess:
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setStroke(new BasicStroke(10));
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.50f));
for (Shape s : shapes) {
//g2.setPaint(Color.BLACK);
g2.draw(s);
g2.setPaint(color);
//g2.fill(s);
}
if (p1 != null && p2 != null) {
g2.setPaint(Color.CYAN);
Shape r = createLine(p1.x, p1.y, p2.x, p2.y);
g2.draw(r);
}
}
但結果不是我想要的,我畫的線條和改變顏色,但是當這種情況發生,我改變之前提請線自動it's顏色到所選的顏色,他們不保留它的「原始顏色」。任何消化?提前致謝。
從一個廁所開始k [在AWT和Swing中繪畫](http://www.oracle.com/technetwork/java/painting-140037.html)瞭解繪畫在Swing中的工作原理。繪畫具有破壞性,預計每次調用paintComponent時,都將從頭開始徹底重新繪製組件狀態。您將需要根據您的需要維護每條線的顏色信息。例如,您可以維護對當前選定線的引用並對其進行不同的繪製,或者使用某種「Map」將某條線映射到顏色 – MadProgrammer
Tnanks @MadProgrammer我將閱讀關於繪畫的內容,我嘗試過「保存」線條顏色的信息到一個數組,但實際上它不能正常工作.. –