繁体   English   中英

在向JPanel添加图形时遇到问题

[英]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));

两件事跳出来

  1. 您的“游戏”面板没有首选大小,默认情况下为0x0。 FlowLayout将使用此信息来决定如何最好地布置面板。 由于大小为0x0,因此重新绘制管理器将忽略它。 尝试覆盖getPreferredSize方法并返回适当的大小,或者使用不使用首选大小的布局管理器,例如BorderLayout
  2. 您的paintComponent方法必须调用super.paintComponet

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM