我試圖繪製簡單的圖形與畫布,在這個類我已經設置了繪畫繪圖畫布上的JFrame
public class Game extends Canvas{
//FIELDS
public int WIDTH = 1024;
public int HEIGHT = WIDTH/16 * 9;
//METHODS
public void start(){
Dimension size = new Dimension (WIDTH, HEIGHT);
setPreferredSize(size);
paint(null);
}
public void paint(Graphics g){
g.setColor(Color.GREEN);
g.fillRect(0, 0, WIDTH, HEIGHT);
g.setColor(Color.BLACK);
g.fillOval(100, 100, 30, 30);
}
}
而在這個窗口
public class MainW {
public static void main(String[] args) {
Game ga = new Game();
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.add(ga);
frame.setVisible(true);
ga.start();
}
}
它的工作原理,但JFrame不適應Canvas。我必須手動調整窗口大小才能看到對象。我如何打包它以便JFrame自動包含Canvas?
編輯: 這真是不可思議。雖然frame.pack()確實很重要,但這還不夠。 我所做的更改啓動方式,把它變成一個構造函數,這樣的:
public class Game extends Canvas{
//FIELDS
public int WIDTH = 1024;
public int HEIGHT = WIDTH/16 * 9;
//METHODS
public void Game(){
Dimension size = new Dimension (WIDTH, HEIGHT);
setPreferredSize(size);
}
屆時,來自其他類,Eclipse的抱怨直接調用構造函數(EG ga.Game),所以我也跟着它的尖端和更改爲:
public static void main(String[] args) {
Game ga = new Game();
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.add(ga);
frame.setVisible(true);
ga.getName();
}
這樣,我實現我的想法,但我真的不知道爲什麼我不能調用構造函數是什麼。
讀添加'frame.pack();''之間添加(GA)'和'調用setVisible(真)'。 – johnchen902
不要將AWT和Swing組件不必要地混合在一起。 YOu應該在JPanel和其'paintCompoment(...)'覆蓋方法上繪圖。 –