调整多个形状的大小但在JFrame中保持Aspect Ration

时间:2018-01-30 19:53:01

标签: java swing

我试图制造一艘可以通过按键调整自己大小的船。我有这个工作唯一的问题是我如何让两个椭圆增加或减少尺寸但保持相互关系?目前,当它们变得更小或更大时,它们会失去原有的形状。我不确定是否有办法在JFrame之内锁定多个形状之间的口粮,我无法在Oracle或Google上找到任何内容。

    public void paint (Graphics g) {
        g.setColor(Color.CYAN);
        g.fillRect(0, 0, xMax, yMax);
        g.setColor(Color.BLACK);
        g.fillOval(x,y,widthBody,heightBody);
        g.fillOval(x+11, y-10, widthTop, heightTop);
    }

    public void keyPressed( KeyEvent e ) {
        int keyPressed = e.getKeyCode();
        switch(keyPressed) {
            case KeyEvent.VK_UP:
                y-=10;
                repaint();
                e.consume();
                break;
            case KeyEvent.VK_DOWN:
                y+=10;
                repaint();
                e.consume();
                break;
            case KeyEvent.VK_LEFT:
                x-=10;
                repaint();
                e.consume();
                break;
            case KeyEvent.VK_RIGHT:
                x+=10;
                repaint();
                e.consume();
                break;
            case KeyEvent.VK_B:
                widthBody = widthBody-10;
                heightBody = heightBody-5;
                widthTop = widthTop-10;
                heightTop = heightTop-5;
                repaint();
                e.consume();
                break;
            case KeyEvent.VK_S:
                widthBody = widthBody+10;
                heightBody = heightBody+5;
                widthTop = widthTop+10;
                heightTop = heightTop+5;
                repaint();
                e.consume();
                break;  
        }
    }

b和s键调整椭圆的大小,使它们的高度和宽度之间的比例保持在2倍,但是当我运行时,随着它变小,顶部椭圆将开始升高到底部椭圆形。

我不太了解如何根据给定的x或y坐标绘制椭圆。

2 个答案:

答案 0 :(得分:0)

  

如何让两个椭圆形增大或减小,但保持相互关系?

g.fillOval(x+11, y-10, widthTop, heightTop);

嗯,你不能硬编码像“11”和“10”这样的值。两者之间的距离将取决于每个人的大小。

所以我猜你应该使用widthBody和heightBody?

答案 1 :(得分:0)

感谢。有意义的是,形状之间的距离应该相对于它们的大小而不是硬编码因子。

我最终放弃了试图找出坐标和大小之间的关系,并找到了Graphics2D,它有一个缩放方法,为我做了工作。我可能仍然需要永远弄清楚方程和参数,以便正确地进行扩展。

全部谢谢