在您将其标记为重复之前我已经在互联网上进行了大量搜索,并尝试了每种解决方案,但是没有人以与我相同的方式来做。在我的情况下,轮换是一门精打细算的课程。我创建了一个继承JLabel类的Java类,在我的类中有一个BufferedImage使用该paintComponent(Graphics g)方法绘制的箭头。我试图使箭头指向特定的点(我是从另一种方法获得的),但是出了点问题,箭头旋转了错误的方向。我认为:由于imageLocation是相对于标签的,因此计算不正确。这是我的代码:package pkg1;import java.awt.*;import java.awt.event.*;import java.awt.image.*;import java.io.*;import javax.imageio.*;import javax.swing.*;public final class ImageLabel extends JLabel { private float angle = 0.0f; // in radians private Point imageLocation = new Point(); private File imageFile = null; private Dimension imageSize = new Dimension(50, 50); private BufferedImage bi; private BufferedImage resizeImage(BufferedImage originalImage, int img_width, int img_height) { int type = originalImage.getType() == 0 ? BufferedImage.TYPE_INT_ARGB : originalImage.getType(); BufferedImage resizedImage = new BufferedImage(img_width, img_height, type); Graphics2D g = resizedImage.createGraphics(); g.drawImage(originalImage, 0, 0, img_width, img_height, null); g.dispose(); return resizedImage; } @Override public void paintComponent(Graphics g) { super.paintComponent(g); if (bi == null) { return; } imageLocation = new Point(getWidth() / 2 - bi.getWidth() / 2, getHeight() / 2 - bi.getHeight() / 2); Graphics2D g2 = (Graphics2D) g; g2.rotate(angle, imageLocation.x + bi.getWidth() / 2, imageLocation.y + bi.getHeight() / 2); g2.drawImage(bi, imageLocation.x, imageLocation.y, null); } public void rotateImage(float angle) { // rotate the image to specific angle this.angle = (float) Math.toRadians(angle); repaint(); } public void pointImageToPoint(Point target) { calculateAngle(target); repaint(); }
添加回答
举报
0/150
提交
取消