我在Jlabel中有一个图像,我想在用户按下按钮时向右旋转90度。我自己尝试过,但有各种错误。我被告知最好的方法是使用Graphics2D?
主类:
private void SearchButtonActionPerformed(java.awt.event.ActionEvent evt) {
BufferedImage image;
try {
image = ImageIO.read(file);
Image scaled = image.getScaledInstance(Jlabel1.getWidth(), Jlabel1.getHeight(), 5);
Jlabel1.setIcon(new ImageIcon(scaled));
按钮:
private void rotateButtonActionPerformed(java.awt.event.ActionEvent evt) {
Graphics2D userImage = (Graphics2D)JLabel1.getGraphics();
userImage.rotate(Math.toRadians(90));
userImage.drawImage(JLabel1, JLabel1.getHeight(), JLabel1.getWidth());
}
答案 0 :(得分:2)
您永远不应该使用Component.getGraphics()来绘制组件。相反,您应该始终覆盖paintComponent并使用传递给它的Graphics对象。
Component.getGraphics()根本无法工作。 Java使用回调 绘制图形的机制。你不应该“推” 使用getGraphics()将图形信息转换为组件。相反,你 应该等到Java调用你的paint()/ paintComponent() 方法。那时你应该提供组件 你想做的图纸。
这种机制是必要的,因此Java可以支持哪些图形系统 当窗口内容被遮挡时(例如,被覆盖的窗口内容)不记得窗口内容 另一个窗口)。当窗口再次可见时,这样的图形 系统必须要求应用程序重建窗口内容。 因此,paint()/ paintComponent()应该是a的记忆 零件。然而,getGraphics()没有任何回忆 以前的绘图操作。所以一旦通过getGraphics()完成绘图 失去了,它无法重建。那里什么都没有 存储旧的绘图数据,AWT / Swing中没有任何内容 通知getGraphics()做一些重绘。
此外,还有一些情况下Component.getGraphics() 返回null。这是该方法的已定义行为。最后, 大多数getGraphics()用户忘记处理Graphics对象 使用后。