[英]Having trouble adding graphics to JPanel
我已经看过网上了,但是仍然无法理解如何向JPanel添加图形
这是我的面板类的代码:
public class GamePanel extends JPanel {
public GamePanel(){
}
public void paintComponent(Graphics g) {
g.drawString("asd", 5, 5);
}
}
而我的主要方法是:
public static void main(String[] args) {
frame.setLayout(new FlowLayout());
frame.getContentPane().setBackground(Color.WHITE);
//i is an instance of GamePanel
frame.add(i);
frame.setPreferredSize(new Dimension(500, 500));
frame.pack();
frame.setVisible(true);
}
文本只会出现在屏幕的一小部分(这适用于我尝试绘制的任何图形对象)。 我究竟做错了什么?
FlowLayout
遵循组件的首选大小。 因此,重写getPreferredSize
可以为您的JPanel
提供可见的大小,而不是在调用JFrame#pack
后面板当前具有的默认零大小Dimension:
class GamePanel extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g); // added to paint child components
g.drawString("asd", 5, 20);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(400, 300);
}
}
编辑:
要消除JPanel
及其包含的JFrame
之间的间隙,请将垂直间隙设置为0
:
frame.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 0));
两件事跳出来
FlowLayout
将使用此信息来决定如何最好地布置面板。 由于大小为0x0,因此重新绘制管理器将忽略它。 尝试覆盖getPreferredSize
方法并返回适当的大小,或者使用不使用首选大小的布局管理器,例如BorderLayout
paintComponent
方法必须调用super.paintComponet
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.