我在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());
}
最佳答案
您永远不要使用Component.getGraphics()在组件上进行绘图。相反,您应该始终覆盖paintComponent并使用传递给它的Graphics对象。
Component.getGraphics()根本无法工作。 Java使用回调
绘制图形的机制。你不应该“推”
使用getGraphics()将图形信息导入组件。相反,你
应该等到Java调用您的paint()/ paintComponent()
方法。那时您应该为Component提供
您想做的图纸。
该机制是必需的,因此Java可以支持图形系统,
当窗口内容被遮盖时(例如被
另一个窗口)。当窗口再次可见时,此类图形
系统必须要求应用程序重建窗口内容。
因此,paint()/ paintComponent()应该是
零件。但是,getGraphics()没有任何回忆
先前的绘图操作。因此,一旦通过getGraphics()完成绘制
丢失,无法重建。那里什么都没有
存储旧的图形数据,AWT / Swing中没有任何内容
通知getGraphics()进行一些重绘。
此外,在某些情况下,Component.getGraphics()只是
返回null。这是该方法的定义行为。最后,
大多数getGraphics()用户忘记处理Graphics对象
使用后。
http://www.pscode.org/guifaq.html