当前位置: 首页 > 知识库问答 >
问题:

在java中旋转同一轴上的形状

羊舌阎宝
2023-03-14

下面我有这个程序。我想让程序在同一点旋转形状,也旋转矩形不止一次。但是,程序只旋转矩形一次,并将旋转后的形状放在框架的另一个点上。我真的需要帮助。谢谢!!!!*

import javax.swing.JPanel;
import java.awt.*;
import java.util.Random;
import java.awt.event.*;
import javax.swing.*;
import java.awt.geom.AffineTransform;

public class BoxesPanel extends JPanel
{
   private boolean drawRect = false, drawCircle = false, Repaint = false;
   private JButton enter; 
   int count = 0;

   //------------------------------------------------------------------
   //   Sets up the drawing panel
   //------------------------------------------------------------------
   public BoxesPanel(int num)
   {
      if(num == 1)
         drawRect = true;
      else if(num == 2)
         drawCircle = true; 

      enter = new JButton("click");
      enter.addActionListener(new ButtonListener());

      add(enter);

      setBackground(Color.gray);
      setPreferredSize(new Dimension(400, 400));
   }

   private class ButtonListener implements ActionListener
   {
      public void actionPerformed (ActionEvent event)
      {
         System.out.println("Rotate has been clicked: " + Repaint+ " " + count);
         Repaint = true;
         repaint();  
      }
   }   

   public void paintComponent(Graphics page)
   {
      super.paintComponent(page);
      Graphics2D g2d = (Graphics2D)page;

      int x, y, width, height;

      x = 100;
      y = 100;

      width = 100;
      height = 100;

      if(Repaint)
         g2d.rotate(Math.toRadians(45), (x+width)/2, (y+height)/2);

      g2d.setColor(Color.yellow);
      AffineTransform old = g2d.getTransform();

      if(drawRect)
         g2d.fillRect(x,y,width,height);
      else if(drawCircle)
         g2d.fillOval(x,y,width,height);

      g2d.setTransform(old);

      System.out.println("Painted: " + Repaint+ " " + count);
      Repaint = false;
   }
}   


import javax.swing.JFrame;

public class Boxes
{
   //---------------------------------------------------------
   //    Creates the main frame of the program.
   //---------------------------------------------------------
   public static void main(String[] args)
   {
      JFrame frame = new JFrame ("Boxes");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      BoxesPanel panel = new BoxesPanel(1);

      frame.getContentPane().add(panel);
      frame.pack();
      frame.setVisible(true);
   }
}

共有1个答案

邢起运
2023-03-14

我做了一些修改。现在似乎奏效了。

public class BoxesPanel extends JPanel
{
   private boolean drawRect = false, drawCircle = false;
   private int angle = 0;
   private JButton enter; 
   int count = 0;

   //------------------------------------------------------------------
   //   Sets up the drawing panel
   //------------------------------------------------------------------
   public BoxesPanel(int num)
   {
      if(num == 1)
         drawRect = true;
      else if(num == 2)
         drawCircle = true; 

      enter = new JButton("click");
      enter.addActionListener(new ButtonListener());

      add(enter);

      setBackground(Color.gray);
      setPreferredSize(new Dimension(400, 400));
   }

   private class ButtonListener implements ActionListener
   {
      public void actionPerformed (ActionEvent event)
      {
         System.out.println("Rotate has been clicked: " + count);
         count++;
         angle = (angle + 45)%360;
         repaint();  
      }
   }   

   public void paintComponent(Graphics page)
   {
      super.paintComponent(page);
      Graphics2D g2d = (Graphics2D)page;

      int x, y, width, height;

      x = 100;
      y = 100;

      width = 100;
      height = 100;

      AffineTransform old = g2d.getTransform();

      g2d.rotate(Math.toRadians(angle), x+width/2, y+height/2);

      g2d.setColor(Color.yellow);

      if(drawRect)        
         g2d.fillRect(x,y,width,height);
      else if(drawCircle)
         g2d.fillOval(x,y,width,height);

      g2d.setTransform(old);

      System.out.println("Painted: " + count);
   }
}
 类似资料:
  • 我试图让x轴标签在柱状图上旋转45度,但没有成功。这是我下面的代码:

  • 问题内容: 我已经在中绘制了一些图形,例如圆形,矩形等。 但是我想绘制一些旋转了特定程度的图形,例如旋转的椭圆。我该怎么办? 问题答案: 如果您使用plain ,则强制转换为first: 旋转整个: 要重置旋转(因此您只旋转一件事): 例:

  • 我使用JavaSlick StateBaeedGame,并希望旋转我的矩形我的碰撞,我知道这是可以做的视觉目的使用图形或Graphics2D对象,但不修改矩形本身,最初列出的变量和图形方法中调用的矩形不旋转,使事情更清楚这里是一些代码: 当我加载GUI时,矩形rectTwo将显示为旋转,但它实际上并没有旋转,如果我测试碰撞,矩形仍然为0度。 那么,如何让矩形变量改变其角度呢?

  • 我不知道如何在X轴上旋转文本。这是一个时间戳,所以随着样本数量的增加,它们越来越接近,直到它们重叠。我想将文本旋转90度,这样随着样本越来越近,它们就不会重叠。 下面是我所拥有的,它工作正常,除了我不知道如何旋转X轴文本。

  • 我正在为我的游戏设计一个区块旋转组件,我遇到了一个我无法理解的小问题。基本上,我希望能够沿所有三个轴旋转网格组件。玩家一次只能旋转一个轴,旋转90度或-90度。我还希望玩家始终根据世界的X、Y和Z轴旋转网格,而不是块的相对轴,它将随着旋转而改变。我如何做到这一点? 无旋转的网格: 网格沿X轴逆时针旋转90度: 这里的问题是,如果我想沿着Y轴旋转块,相反,它将沿着Z轴旋转块,因为块现在被旋转。我如何

  • 问题内容: 我对Three.js的旋转有很大的疑问,我想在自己的一款游戏中旋转3D立方体。 并且(x,y,z)可以是(1、0、0) 则多维数据集可以旋转,但是问题在于多维数据集绕其自身的轴旋转,因此,旋转后,它无法按预期旋转。 并且我尝试使用 matrixRotationWorld 作为 但它不起作用,我不以错误的方式使用它,还是有其他方法。 因此,如何让3D立方体绕世界轴旋转??? 问题答案: