我正在尝试用 Canvas 绘制简单的形状,在这堂课中我已经设置了绘画
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() 确实是必不可少的,但这还不够。我所做的是更改 start 方法并将其转换为构造函数,如下所示:
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();
}
这样我就实现了我的想法,但我真的不知道为什么我不能调用构造函数。