【问题标题】:Rotate JLabel 90 Degrees Java将 JLabel 旋转 90 度 Java
【发布时间】:2012-06-08 15:31:19
【问题描述】:

我在 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());
    }

【问题讨论】:

  • “根本不值得发帖” 让人觉得“根本不值得回答”。
  • “甚至不值得发帖”意味着他们已经满足了他们的需求.......
  • 所以你基本上决定不发布任何相关代码,并询问我们如何做到这一点。所以我遗漏了一些重要信息:我需要将发票寄到哪里?
  • 我不是要你为我编写代码。我只是简单地询问 Graphics2D 是否是获得此类结果的最佳方法。

标签: java swing rotation jlabel imageicon


【解决方案1】:

永远不要使用 Component.getGraphics() 在组件上绘图。相反,您应该始终覆盖 paintComponent 并使用传递给它的 Graphics 对象。

Component.getGraphics() 根本无法工作。 Java 使用回调 绘制图形的机制。你不应该“推” 使用 getGraphics() 将图形信息放入组件中。相反,你 应该等到Java调用你的paint()/paintComponent() 方法。那时你应该为组件提供 你想做的图纸。

这种机制是必要的,因此 Java 可以支持图形系统 当窗口被遮挡时不记得窗口内容(例如,被 另一个窗口)。当窗口再次可见时,这些图形 系统必须要求应用程序重建窗口内容。 因此,paint()/paintComponent() 应该是一个 零件。但是,getGraphics() 不记得 以前的绘图操作。因此,一旦通过 getGraphics() 完成绘图 丢失了,无法重建。里面什么都没有 存储旧的绘图数据,在 AWT/Swing 中没有任何内容 通知 getGraphics() 重新绘制。

另外,在某些情况下 Component.getGraphics() 只是简单地 返回空值。这是该方法的定义行为。最后, getGraphics() 的大多数用户忘记释放 Graphics 对象 使用后。

http://www.pscode.org/guifaq.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-22
    • 2015-03-22
    • 2022-01-13
    • 2011-09-24
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    相关资源
    最近更新 更多