2013-12-18 44 views
2

在Mac上绘制矩形时出现问题。 该代码在窗口上工作,并在框架上绘制了一个矩形,但在Mac上,框架显示为没有矩形。我在两个平台上编译了完全相同的代码。在Mac上的JFrame上绘制矩形

下面是代码:

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。

任何帮助表示赞赏!

+1

如果您将window.setVisible(true)作为主方法的最后一行,它是否工作? –

+0

工作!非常感谢!你会不会解释为什么它可以在windows而不是mac上工作? – MLC

回答

1

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

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

+0

太好了,非常感谢! – MLC