我想在中间划线。我尝试了不同的坐标

时间:2015-09-25 03:20:06

标签: java swing paintcomponent

enter image description here这是我的paintComponent,其中包含坐标

public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D)g; 
        g2.drawLine(-100,0,500,0);
        g2.drawLine(141,-500,141,500);
        g2.translate(getWidth()/2.0, getHeight()/2.0);
        g2.scale(1,-1);
        g2.rotate(45*Math.PI/180);
        Rectangle2D r = new Rectangle2D.Double(0,0,100,100);
        g2.fill(r);

Output

1 个答案:

答案 0 :(得分:5)

这有点像作弊,但是......

Origin

protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g.create();
    g2.drawLine(getWidth() / 2, 0, getWidth() / 2, getHeight());
    g2.drawLine(0, getHeight() / 2, getWidth(), getHeight()/ 2);
    g2.translate(getWidth() / 2.0, (getHeight() / 2.0));
    g2.scale(1, -1);
    g2.rotate(45 * Math.PI / 180);
    Rectangle2D r = new Rectangle2D.Double(-50, -50, 100, 100);
    g2.fill(r);
    g2.dispose();
}

基本上,原点现在是屏幕的中心,因此为了在原点周围“居中”绘制矩形,需要相应地调整x / y

现在,您也可以通过50x50调整原点,但是您需要更改Graphics上下文旋转到框中心的锚点

protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g.create();
    g2.drawLine(getWidth() / 2, 0, getWidth() / 2, getHeight());
    g2.drawLine(0, getHeight() / 2, getWidth(), getHeight()/ 2);
    g2.translate((getWidth() / 2.0) - 50, (getHeight() / 2.0) - 50);
    g2.scale(1, -1);
    g2.rotate(45 * Math.PI / 180, 50, 50);
    Rectangle2D r = new Rectangle2D.Double(0, 0, 100, 100);
    g2.fill(r);
    g2.dispose();
}