2013-12-18 152 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