我正在製作一個JFrame並在其上繪製一個矩形。 它不起作用,有時它是完全黑色的,有時是完全白色的,這裏是我的方法。此代碼不會顯示矩形,但它應該
所以渲染方法被調用兩次,因爲它第一次創建緩衝區,也忽略幀率,它現在是不重要的。
EDIT1:我解決了一個問題: 它繪製一個矩形了,但有時它只是顯示一個白色的屏幕。我仍然需要解決這個問題
Edit2:我不僅在尋找解決方案,我也在尋找我的問題發生的原因,所以我不只是盲目地編寫代碼。
public MyFrame(String title,int width,int height)
{
super(title);
this.setSize(width,height);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setUndecorated(true);
this.addKeyListener(new KeyInput());
this.setVisible(true);
}
public void draw(Graphics2D g,int arg)
{
g.setColor(new Color(0,0,0,255));
g.fillRect(0,0,SIZE,SIZE);
g.setColor(new Color(255,255,255));
g.fillRect(0,0,50,50);
}
public void render(int arg)
{
BufferStrategy bs=this.getBufferStrategy();
if(null==bs)
{
this.createBufferStrategy(3);
}
else
{
Graphics2D g=(Graphics2D)bs.getDrawGraphics();
g.setColor(new Color(0,0,0,255));
g.fillRect(0,0,this.getWidth(),this.getHeight());
BufferedImage canvas=new BufferedImage(SIZE,SIZE,2);
int s=Math.min(this.getWidth(),this.getHeight());
g.drawImage(canvas,(this.getWidth()-s)/2,(this.getHeight()-s)/2,s,s,this);
Graphics2D g2=canvas.createGraphics();
this.draw(g2,arg);
bs.show();
g.dispose();
g2.dispose();
}
}
public static void main(String[] args)
{
Dimension d=Toolkit.getDefaultToolkit().getScreenSize();
FRAME=new MyFrame("Insert name here!",d.width,d.height,1);
FRAME.render(0);
FRAME.render(0);
}
編輯:這已不再是問題,我設法解決了這個問題,無論如何感謝您的幫助。
1)*「INSERT_FRAME_NAME_HERE」*也不應該是。請學習常用的Java命名規則(命名慣例 - 例如'EachWordUpperCaseClass','firstWordLowerCaseMethod()','firstWordLowerCaseAttribute',除非它是'UPPER_CASE_CONSTANT')並且一致地使用它。即使在示例代碼中。 2)爲了更快地獲得更好的幫助,請發佈[MCVE]或[簡短,獨立,正確的示例](http://www.sscce.org/)。 –
好吧,我會改變它。 –
請查看:[教程:執行自定義繪畫](http://docs.oracle.com/javase/tutorial/uiswing/painting/index.html):Swing圖形入門教程 –