當我添加BorderLayout
或FlowLayout
時,我無法在Canvas
上繪製任何類型的圖形。雖然它可以很好地與GridLayout
但接口不太好。 即使我嘗試setBounds
,我也會得到與邊界和流佈局相同的結果。任何人都可以就這個問題給我一些建議嗎?爲什麼下面的代碼只能用於GridLayout?
//Why does the following code not work with FlowLayout??
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class Mycanvas1 extends Canvas
{
int flag=0;
public void paint(Graphics g)
{
if(flag==1)
{
g.setColor(Color.pink);
g.drawRoundRect(30,30,100,100,20,20);
g.setColor(Color.blue);
g.drawString("Anks",67,75);
g.drawOval(100,130,15,15);
g.drawOval(50,130,15,15);
}
}
}
class Myf2 implements ActionListener
{
Mycanvas1 m=new Mycanvas1();
Myf2()
{
JFrame f=new JFrame("Graphics");
Button b=new Button("Line");
//b.setBounds(400,400,41,41);
b.addActionListener(this);
f.add(m);
f.add(b);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(400,400);
f.setLayout(new GridLayout());
f.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
m.flag=1;
m.repaint();
}
public static void main(String... s)
{
new Myf2();
}
}
使用合乎邏輯的一致形式縮進代碼行和塊。縮進旨在使代碼的流程更易於遵循! –
作爲提示,在進行自定義繪畫時,首次嘗試擴展「JPanel」。一個'JPanel'是1)Swing。 2)默認雙緩衝。 3)足夠快速的簡單動畫。 - 如果你真的需要高遊戲渲染速度,我強烈建議全屏獨佔模式或遊戲引擎(可能使用FSE模式)。編寫快速的渲染代碼是一門藝術和科學,最好不要由新手來嘗試。 –