【问题标题】:painting a rectangle on JFrame on mac在 Mac 上的 JFrame 上绘制一个矩形
【发布时间】:2013-12-18 19:02:48
【问题描述】:

我在 Mac 上绘制矩形时遇到问题。 该代码适用于 Windows,并且在 Frame 上绘制了一个矩形,但在 mac 上,Frame 出现时没有矩形。我在两个平台上编译了完全相同的代码。

代码如下:

mainClass.java

import javax.swing.JFrame;
import java.awt.Rectangle;

public class mainClass
{
    public static void main(String[] args)
    {
        JFrame window = new JFrame();
        window.setSize(640, 480);
        window.setTitle("New Window");
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setVisible(true);

        drawingComponent DC = new drawingComponent();
        window.add(DC);
    }
}

drawingComponent.java

import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JComponent;
import java.awt.Rectangle;

public class drawingComponent extends JComponent
{
    public void paintComponent(Graphics g)
    {
        Graphics2D g2 = (Graphics2D) g;

        Rectangle rect1 = new Rectangle(5, 5, 100, 200);
        g2.draw(rect1);
    }
}

它们被保存到 2 个不同的 .java 文件中。我只在两个平台上编译了 mainClass.java。

感谢任何帮助!

【问题讨论】:

  • 如果将 window.setVisible(true) 行设置为 main 方法中的最后一行,它会起作用吗?
  • 成功了!非常感谢!您愿意解释一下为什么它可以在 windows 上运行,但在 mac 上不行吗?

标签: java macos jframe paintcomponent


【解决方案1】:

您应该做的最后一件事是将框架设置为可见,因为这是绘画发生的地方。如果您先设置可见,然后修改组件,则在重新绘制屏幕之前您将看不到更改。当屏幕由于某种原因失效时会发生重绘。

正是为什么这在 mac 上很明显,我不能说清楚,也许是 JVM 的实现有一些小的差异。如果您必须在 UI 可见后更新它,您可以重新验证它以使其正确重新绘制。 This answer 有更多细节。

【讨论】:

    猜你喜欢
    • 2014-02-15
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多