0

我的问题如下。我有一个触摸传感器,想用它在显示器上画画。它给了我三个值:x 坐标、y 坐标和压力。到目前为止,我的应用程序可以绘制一个椭圆(或者更好地说是几个显示为线条的椭圆),并且这个椭圆根据力的大小不同。但我想要根据力量不同的颜色。

所以这是我的代码。将颜色设置为橙色的行目前无效。我也希望注释掉的部分也能正常工作。

 import java.awt.Color;
 import java.awt.Dimension;
 import java.awt.Graphics;
 import javax.swing.JFrame;

public class GUI2 extends JFrame {

public GUI2() {
    this.setPreferredSize(new Dimension(1200, 1000));
    this.pack();
    this.setLocation(300, 50); // x, y
    this.setVisible(true);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

@Override
public void paint(Graphics g) {
    super.paint(g);
}

public void drawPoint (int x, int y, int force){
    int width = (force*2)/1000;
    /*
    if (force < 3000){
        this.getGraphics().setColor(Color.YELLOW);
    }
    else if (force < 6000){
        this.getGraphics().setColor(Color.ORANGE);
    }
    else if (force < 9000){
        this.getGraphics().setColor(Color.RED);
    }
    else {
        this.getGraphics().setColor(Color.BLUE);
    }
    */

        this.getGraphics().setColor(Color.ORANGE); // <- no effect
        System.out.println("COLOR: " + this.getGraphics().getColor().toString() );

    this.getGraphics().fillOval(x, y, width, width); // <- works
}
}
4

1 回答 1

2

这是Swing 教程的链接。您应该首先阅读关于Custom Painting.

为了回答您的问题,我猜 getGraphics() 方法在您每次调用该方法时都会返回一个新对象。所以你的代码应该是:

Graphics g = getGraphics();
g.setColor(...);
g.drawOval(...);

同样,您不应该使用这种方法进行自定义绘画,但我想提一下这个问题的答案,因为这通常是一种更好的编码风格。那就是不要多次调用相同的方法。而是调用该方法一次并将其分配给一个变量。这样您就可以确定您正在对同一个对象调用方法。

于 2013-06-21T01:07:20.400 回答