您好我正在尝试使用Java
和paintComponent
对象在Graphics
中做一些绘图示例。我需要一个固定大小的'舞台'(400x300)用于绘图,window/frame
“围绕它”。
这是我的设置:
public class MyJFrame extends JFrame{
public MyJFrame(){
//setSize(new Dimension(400,300));
setBackground(Color.green);
Stage stage = new Stage();
add(stage);
this.pack();
this.setResizable(false);
this.setVisible(true);
System.out.println(this.size());
System.out.println(stage.size());
}
}
public class Stage extends JPanel {
public Stage(){
setPreferredSize(new Dimension(400,300));
//setSize(new Dimension(400,300));
}
@Override
protected void paintComponent(Graphics g) {
g.setColor(Color.BLACK);
g.fillRect(0, 0, 400, 300);
}
}
印刷品的输出是:
java.awt.Dimension[width=416,height=338]
java.awt.Dimension[width=400,height=300]
但结果如下:
黑色部分 400x300 ..不确定此额外间距来自何处。
我尝试了setSize
setPreferredSize
和布局的几种变体......但没有真正有效。
P.S任何java fiddle out?
答案 0 :(得分:4)
//this.pack();
this.setResizable(false);
this.pack();
答案 1 :(得分:3)
两件事。
pack
之后致电setResizable
。这是一个(不常见的)已知错误例如,您应该使用g.fillRect(0, 0, 400, 300);
g.fillRect(0, 0, getWidth(), getHeight());
答案 2 :(得分:2)
在这种情况下,我认为最好使用BufferedImage
作为绘画表面,只需在JLabel
中显示它。在this answer中可以看到一个简单的(动画)示例。