我试图绘制简单的图形与画布,在这个类我已经设置了绘画绘图画布上的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(...)'覆盖方法上绘图。 –